🏡 index : ~doyle/chartered.git

author Jordan Doyle <jordan@doyle.la> 2021-09-15 22:36:48.0 +01:00:00
committer Jordan Doyle <jordan@doyle.la> 2021-09-15 22:50:09.0 +01:00:00
commit
5450ece8eb22fff0f8de6a0a22e3274647c6e4ab [patch]
tree
c89552dbb94e182447cc075885f97a2d2ae9efe0
parent
9b705d018fb6f67ad451b1546ae003fdd80fb1eb
download
5450ece8eb22fff0f8de6a0a22e3274647c6e4ab.tar.gz

Implement foundations of SingleCrate page on frontend



Diff

 .gitignore                                        |    1 +
 chartered-frontend/index.html                     |    2 +-
 chartered-frontend/package-lock.json              | 3457 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 chartered-frontend/package.json                   |   11 ++++++++---
 chartered-frontend/src/index.sass                 |   14 ++++++++++++--
 chartered-frontend/src/index.tsx                  |    4 ++++
 chartered-frontend/src/overscrollColourFixer.ts   |   19 +++++++++++++++++++
 chartered-frontend/src/useAuth.tsx                |    6 +++---
 chartered-frontend/src/util.tsx                   |   10 ++++++++++
 chartered-web/src/main.rs                         |   16 +++++++++++++---
 chartered-frontend/src/pages/Dashboard.tsx        |  151 +++++++++++++++++++++++++++++++++++++++++---------------------------------------
 chartered-frontend/src/pages/SingleCrate.tsx      |  294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 chartered-frontend/src/sections/Nav.tsx           |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 chartered-web/src/endpoints/login.rs              |   59 -----------------------------------------------------------
 chartered-web/src/endpoints/mod.rs                |   14 +++++++++++++-
 chartered-web/src/endpoints/cargo_api/mod.rs      |   12 ------------
 chartered-web/src/endpoints/cargo_api/publish.rs  |   35 +++++++++++++++++++++++------------
 chartered-web/src/endpoints/web_api/crate_info.rs |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 chartered-web/src/endpoints/web_api/login.rs      |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 chartered-web/src/endpoints/web_api/mod.rs        |    5 +++++
 20 files changed, 4004 insertions(+), 284 deletions(-)

diff --git a/.gitignore b/.gitignore
index 12fad47..2c83db1 100644
--- a/.gitignore
+++ a/.gitignore
@@ -1,3 +1,4 @@
/target
.idea/
/chartered.db
.DS_Store
diff --git a/chartered-frontend/index.html b/chartered-frontend/index.html
index 3e34667..99fbba8 100644
--- a/chartered-frontend/index.html
+++ a/chartered-frontend/index.html
@@ -6,7 +6,7 @@
    <title>chartered</title>
</head>

<body>
<body class="min-vh-100">
    <div id="root"></div>
    <script src="./src/index.tsx"></script>
</body>
diff --git a/chartered-frontend/package-lock.json b/chartered-frontend/package-lock.json
index 2b3df72..a37e503 100644
--- a/chartered-frontend/package-lock.json
+++ a/chartered-frontend/package-lock.json
@@ -10,17 +10,21 @@
      "license": "0BSD",
      "dependencies": {
        "bootstrap": "^5.1.1",
        "bootstrap-icons": "^1.5.0",
        "react": "^17.0.2",
        "react-bootstrap-icons": "^1.5.0",
        "react-dom": "^17.0.2",
        "react-router-dom": "^5.3.0"
        "react-markdown": "^7.0.1",
        "react-router-dom": "^5.3.0",
        "react-syntax-highlighter": "^15.4.4",
        "remark-gfm": "^2.0.0",
        "source-code-pro": "^2.38.0"
      },

      "devDependencies": {
        "@types/react": "^17.0.20",
        "@types/react-dom": "^17.0.9",
        "parcel-bundler": "^1.12.5",
        "sass": "^1.39.2",
        "serve": "^12.0.1",
        "typescript": "^4.4.2"
      }

    },

@@ -1780,11 +1784,44 @@
        "url": "https://opencollective.com/popperjs"
      }

    },

    "node_modules/@types/debug": {
      "version": "4.1.7",
      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
      "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
      "dependencies": {
        "@types/ms": "*"
      }

    },

    "node_modules/@types/hast": {
      "version": "2.3.4",
      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
      "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
      "dependencies": {
        "@types/unist": "*"
      }

    },

    "node_modules/@types/mdast": {
      "version": "3.0.10",
      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
      "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
      "dependencies": {
        "@types/unist": "*"
      }

    },

    "node_modules/@types/mdurl": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
      "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
    },

    "node_modules/@types/ms": {
      "version": "0.7.31",
      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
      "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
    },

    "node_modules/@types/prop-types": {
      "version": "15.7.4",
      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
      "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
      "dev": true
      "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ=="
    },

    "node_modules/@types/q": {
      "version": "1.5.5",
@@ -1796,7 +1833,6 @@
      "version": "17.0.20",
      "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.20.tgz",
      "integrity": "sha512-wWZrPlihslrPpcKyCSlmIlruakxr57/buQN1RjlIeaaTWDLtJkTtRW429MoQJergvVKc4IWBpRhWw7YNh/7GVA==",
      "dev": true,
      "dependencies": {
        "@types/prop-types": "*",
        "@types/scheduler": "*",
@@ -1815,7 +1851,17 @@
    "node_modules/@types/scheduler": {
      "version": "0.16.2",
      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
    },

    "node_modules/@types/unist": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
    },

    "node_modules/@zeit/schemas": {
      "version": "2.6.0",
      "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz",
      "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==",
      "dev": true
    },

    "node_modules/abab": {
@@ -1823,6 +1869,19 @@
      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
      "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
      "dev": true
    },

    "node_modules/accepts": {
      "version": "1.3.7",
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
      "dev": true,
      "dependencies": {
        "mime-types": "~2.1.24",
        "negotiator": "0.6.2"
      },

      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/acorn": {
      "version": "7.4.1",
@@ -1888,6 +1947,15 @@
      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
      "dev": true
    },

    "node_modules/ansi-align": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
      "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
      "dev": true,
      "dependencies": {
        "string-width": "^2.0.0"
      }

    },

    "node_modules/ansi-regex": {
      "version": "3.0.0",
@@ -1946,6 +2014,32 @@
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/arch": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
      "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/arg": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
      "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
      "dev": true
    },

    "node_modules/argparse": {
      "version": "1.0.10",
@@ -2216,6 +2310,15 @@
        "babel-runtime": "^6.11.6",
        "babel-types": "^6.15.0",
        "lodash.clone": "^4.5.0"
      }

    },

    "node_modules/bail": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
      "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/balanced-match": {
@@ -2325,12 +2428,22 @@
        "@popperjs/core": "^2.10.1"
      }

    },

    "node_modules/bootstrap-icons": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.5.0.tgz",
      "integrity": "sha512-44feMc7DE1Ccpsas/1wioN8ewFJNquvi5FewA06wLnqct7CwMdGDVy41ieHaacogzDqLfG8nADIvMNp9e4bfbA==",
    "node_modules/boxen": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
      "dev": true,
      "dependencies": {
        "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"
      },

      "engines": {
        "node": ">=10"
        "node": ">=4"
      }

    },

    "node_modules/brace-expansion": {
@@ -2558,6 +2671,15 @@
      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
      "dev": true
    },

    "node_modules/bytes": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
      "dev": true,
      "engines": {
        "node": ">= 0.8"
      }

    },

    "node_modules/cache-base": {
      "version": "1.0.1",
@@ -2626,6 +2748,15 @@
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
      "dev": true,
      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/camelcase": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
      "dev": true,
      "engines": {
        "node": ">=4"
@@ -2658,6 +2789,15 @@
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
      "dev": true
    },

    "node_modules/ccount": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz",
      "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/chalk": {
      "version": "2.4.2",
@@ -2671,6 +2811,33 @@
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/character-entities": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
      "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/character-entities-legacy": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
      "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/character-reference-invalid": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
      "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/chokidar": {
@@ -2775,6 +2942,15 @@
      "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": ">=0.10.0"
      }

    },

    "node_modules/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,
      "engines": {
        "node": ">=0.10.0"
@@ -2799,6 +2975,32 @@
      "dev": true,
      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/clipboardy": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
      "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
      "dev": true,
      "dependencies": {
        "arch": "^2.1.1",
        "execa": "^1.0.0",
        "is-wsl": "^2.1.1"
      },

      "engines": {
        "node": ">=8"
      }

    },

    "node_modules/clipboardy/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/clone": {
@@ -2888,6 +3090,15 @@
      },

      "engines": {
        "node": ">= 0.8"
      }

    },

    "node_modules/comma-separated-tokens": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
      "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/command-exists": {
@@ -2906,6 +3117,51 @@
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
      "dev": true
    },

    "node_modules/compressible": {
      "version": "2.0.18",
      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
      "dev": true,
      "dependencies": {
        "mime-db": ">= 1.43.0 < 2"
      },

      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/compression": {
      "version": "1.7.3",
      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
      "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
      "dev": true,
      "dependencies": {
        "accepts": "~1.3.5",
        "bytes": "3.0.0",
        "compressible": "~2.0.14",
        "debug": "2.6.9",
        "on-headers": "~1.0.1",
        "safe-buffer": "5.1.2",
        "vary": "~1.1.2"
      },

      "engines": {
        "node": ">= 0.8.0"
      }

    },

    "node_modules/compression/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/compression/node_modules/ms": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
      "dev": true
    },

    "node_modules/concat-map": {
@@ -2940,6 +3196,15 @@
      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
      "dev": true
    },

    "node_modules/content-disposition": {
      "version": "0.5.2",
      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
      "dev": true,
      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/convert-source-map": {
      "version": "1.8.0",
@@ -3436,8 +3701,7 @@
    "node_modules/csstype": {
      "version": "3.0.8",
      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
      "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
      "dev": true
      "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
    },

    "node_modules/dashdash": {
      "version": "1.14.1",
@@ -3480,7 +3744,6 @@
      "version": "4.3.2",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
      "dev": true,
      "dependencies": {
        "ms": "2.1.2"
      },

@@ -3500,6 +3763,15 @@
      "dev": true,
      "engines": {
        "node": ">=0.10"
      }

    },

    "node_modules/deep-extend": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
      "dev": true,
      "engines": {
        "node": ">=4.0.0"
      }

    },

    "node_modules/deep-is": {
@@ -3754,6 +4026,15 @@
      "dev": true,
      "engines": {
        "node": ">= 0.8"
      }

    },

    "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/entities": {
@@ -3960,6 +4241,24 @@
      "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/expand-brackets": {
@@ -4057,8 +4356,7 @@
    "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
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
    },

    "node_modules/extend-shallow": {
      "version": "2.0.1",
@@ -4167,12 +4465,33 @@
      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },

    "node_modules/fast-url-parser": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
      "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
      "dev": true,
      "dependencies": {
        "punycode": "^1.3.2"
      }

    },

    "node_modules/fastparse": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
      "dev": true
    },

    "node_modules/fault": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
      "dependencies": {
        "format": "^0.2.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/file-uri-to-path": {
      "version": "1.0.0",
@@ -4240,6 +4559,14 @@
      },

      "engines": {
        "node": ">= 0.12"
      }

    },

    "node_modules/format": {
      "version": "0.2.2",
      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
      "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=",
      "engines": {
        "node": ">=0.4.x"
      }

    },

    "node_modules/fragment-cache": {
@@ -4324,6 +4651,18 @@
      "dev": true,
      "engines": {
        "node": ">=4"
      }

    },

    "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": {
@@ -4629,6 +4968,61 @@
      "dependencies": {
        "inherits": "^2.0.3",
        "minimalistic-assert": "^1.0.1"
      }

    },

    "node_modules/hast-util-parse-selector": {
      "version": "2.2.5",
      "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
      "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/hastscript": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
      "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
      "dependencies": {
        "@types/hast": "^2.0.0",
        "comma-separated-tokens": "^1.0.0",
        "hast-util-parse-selector": "^2.0.0",
        "property-information": "^5.0.0",
        "space-separated-tokens": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/hastscript/node_modules/comma-separated-tokens": {
      "version": "1.0.8",
      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
      "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/hastscript/node_modules/property-information": {
      "version": "5.6.0",
      "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
      "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
      "dependencies": {
        "xtend": "^4.0.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/hastscript/node_modules/space-separated-tokens": {
      "version": "1.1.5",
      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
      "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/hex-color-regex": {
@@ -4636,6 +5030,14 @@
      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
      "dev": true
    },

    "node_modules/highlight.js": {
      "version": "10.7.3",
      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
      "engines": {
        "node": "*"
      }

    },

    "node_modules/history": {
      "version": "4.10.1",
@@ -4983,7 +5385,18 @@
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
      "dev": true
    },

    "node_modules/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/inline-style-parser": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
      "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
    },

    "node_modules/internal-slot": {
      "version": "1.0.3",
@@ -5029,12 +5442,34 @@
        "node": ">=0.10.0"
      }

    },

    "node_modules/is-arrayish": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
      "dev": true
    "node_modules/is-alphabetical": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
      "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/is-alphanumerical": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
      "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
      "dependencies": {
        "is-alphabetical": "^2.0.0",
        "is-decimal": "^2.0.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/is-arrayish": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
      "dev": true
    },

    "node_modules/is-bigint": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -5153,6 +5588,15 @@
      },

      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }

    },

    "node_modules/is-decimal": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
      "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/is-descriptor": {
@@ -5185,6 +5629,21 @@
      "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": {
@@ -5203,6 +5662,15 @@
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
      "dev": true,
      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/is-glob": {
@@ -5215,6 +5683,15 @@
      },

      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/is-hexadecimal": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
      "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/is-html": {
@@ -5275,6 +5752,17 @@
      "dev": true,
      "engines": {
        "node": ">=8"
      }

    },

    "node_modules/is-plain-obj": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
      "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
      "engines": {
        "node": ">=12"
      },

      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }

    },

    "node_modules/is-plain-object": {
@@ -5310,6 +5798,15 @@
      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
      "dev": true
    },

    "node_modules/is-stream": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/is-string": {
      "version": "1.0.7",
@@ -5636,6 +6133,15 @@
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/longest-streak": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz",
      "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/loose-envify": {
@@ -5647,6 +6153,29 @@
      },

      "bin": {
        "loose-envify": "cli.js"
      }

    },

    "node_modules/lowlight": {
      "version": "1.20.0",
      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
      "dependencies": {
        "fault": "^1.0.0",
        "highlight.js": "~10.7.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/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,
      "dependencies": {
        "pseudomap": "^1.0.2",
        "yallist": "^2.1.2"
      }

    },

    "node_modules/magic-string": {
@@ -5677,6 +6206,15 @@
      },

      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/markdown-table": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz",
      "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/md5.js": {
@@ -5688,13 +6226,208 @@
        "hash-base": "^3.0.0",
        "inherits": "^2.0.1",
        "safe-buffer": "^5.1.2"
      }

    },

    "node_modules/mdast-util-definitions": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz",
      "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "unist-util-visit": "^3.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
      "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0",
        "unist-util-visit-parents": "^4.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-find-and-replace": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz",
      "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==",
      "dependencies": {
        "escape-string-regexp": "^5.0.0",
        "unist-util-is": "^5.0.0",
        "unist-util-visit-parents": "^4.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
      "engines": {
        "node": ">=12"
      },

      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }

    },

    "node_modules/mdast-util-from-markdown": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz",
      "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "mdast-util-to-string": "^3.0.0",
        "micromark": "^3.0.0",
        "micromark-util-decode-numeric-character-reference": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0",
        "parse-entities": "^3.0.0",
        "unist-util-stringify-position": "^3.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-gfm": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz",
      "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==",
      "dependencies": {
        "mdast-util-gfm-autolink-literal": "^1.0.0",
        "mdast-util-gfm-strikethrough": "^1.0.0",
        "mdast-util-gfm-table": "^1.0.0",
        "mdast-util-gfm-task-list-item": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-gfm-autolink-literal": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz",
      "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "ccount": "^2.0.0",
        "mdast-util-find-and-replace": "^2.0.0",
        "micromark-util-character": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-gfm-strikethrough": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz",
      "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==",
      "dependencies": {
        "@types/mdast": "^3.0.3",
        "mdast-util-to-markdown": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-gfm-table": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz",
      "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==",
      "dependencies": {
        "markdown-table": "^3.0.0",
        "mdast-util-to-markdown": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-gfm-task-list-item": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz",
      "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==",
      "dependencies": {
        "@types/mdast": "^3.0.3",
        "mdast-util-to-markdown": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-to-hast": {
      "version": "11.2.1",
      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.2.1.tgz",
      "integrity": "sha512-tvy3qzo/SKxkQ9smt7D7NX+4nAQng+eK4/A7PVUzAT4+n0NtgaDRyZA2DmGExAbW7xUX4O+4jkO2u94dNStssw==",
      "dependencies": {
        "@types/hast": "^2.0.0",
        "@types/mdast": "^3.0.0",
        "@types/mdurl": "^1.0.0",
        "mdast-util-definitions": "^5.0.0",
        "mdurl": "^1.0.0",
        "unist-builder": "^3.0.0",
        "unist-util-generated": "^2.0.0",
        "unist-util-position": "^4.0.0",
        "unist-util-visit": "^4.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-to-markdown": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.1.tgz",
      "integrity": "sha512-yj0UexEfdH0Zqw9CztzC5+J6OZKgCY6K0ommn56SBlPKIV3NGqk1Wo/zw1Q0e/kHb50wmQ8O9cwbOl7vmaJjxg==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "longest-streak": "^3.0.0",
        "mdast-util-to-string": "^3.0.0",
        "parse-entities": "^3.0.0",
        "unist-util-visit": "^4.0.0",
        "zwitch": "^2.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdast-util-to-string": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
      "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/mdn-data": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
      "dev": true
    },

    "node_modules/mdurl": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
    },

    "node_modules/merge-source-map": {
      "version": "1.0.4",
@@ -5721,8 +6454,495 @@
      "dev": true,
      "engines": {
        "node": ">= 8"
      }

    },

    "node_modules/micromark": {
      "version": "3.0.5",
      "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.5.tgz",
      "integrity": "sha512-QfjERBnPw0G9mxhOCkkbRP0n8SX8lIBLrEKeEVceviUukqVMv3hWE4AgNTOK/W6GWqtPvvIHg2Apl3j1Dxm6aQ==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "@types/debug": "^4.0.0",
        "debug": "^4.0.0",
        "micromark-core-commonmark": "^1.0.1",
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-combine-extensions": "^1.0.0",
        "micromark-util-decode-numeric-character-reference": "^1.0.0",
        "micromark-util-encode": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-sanitize-uri": "^1.0.0",
        "micromark-util-subtokenize": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.1",
        "parse-entities": "^3.0.0"
      }

    },

    "node_modules/micromark-core-commonmark": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.1.tgz",
      "integrity": "sha512-vEOw8hcQ3nwHkKKNIyP9wBi8M50zjNajtmI+cCUWcVfJS+v5/3WCh4PLKf7PPRZFUutjzl4ZjlHwBWUKfb/SkA==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-factory-destination": "^1.0.0",
        "micromark-factory-label": "^1.0.0",
        "micromark-factory-space": "^1.0.0",
        "micromark-factory-title": "^1.0.0",
        "micromark-factory-whitespace": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-classify-character": "^1.0.0",
        "micromark-util-html-tag-name": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-subtokenize": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.1",
        "parse-entities": "^3.0.0"
      }

    },

    "node_modules/micromark-extension-gfm": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz",
      "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==",
      "dependencies": {
        "micromark-extension-gfm-autolink-literal": "^1.0.0",
        "micromark-extension-gfm-strikethrough": "^1.0.0",
        "micromark-extension-gfm-table": "^1.0.0",
        "micromark-extension-gfm-tagfilter": "^1.0.0",
        "micromark-extension-gfm-task-list-item": "^1.0.0",
        "micromark-util-combine-extensions": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-extension-gfm-autolink-literal": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz",
      "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==",
      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-sanitize-uri": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-extension-gfm-strikethrough": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.1.tgz",
      "integrity": "sha512-fzGYXWz9HPWH1uHqYwdyR8XpEtuoYVHUjTdPQTnl3ETVZOQe1NXMwE3RA7AMqeON52hG+kO9g1/P1+pLONBSMQ==",
      "dependencies": {
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-classify-character": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-extension-gfm-table": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz",
      "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==",
      "dependencies": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-extension-gfm-tagfilter": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz",
      "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==",
      "dependencies": {
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-extension-gfm-task-list-item": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz",
      "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==",
      "dependencies": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/micromark-factory-destination": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
      "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-factory-label": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz",
      "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-factory-space": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
      "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-factory-title": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz",
      "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-factory-whitespace": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
      "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-character": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
      "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-chunked": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
      "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "node_modules/micromark-util-classify-character": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
      "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-combine-extensions": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
      "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-decode-numeric-character-reference": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
      "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "node_modules/micromark-util-encode": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz",
      "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ]

    },

    "node_modules/micromark-util-html-tag-name": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz",
      "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ]

    },

    "node_modules/micromark-util-normalize-identifier": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
      "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "node_modules/micromark-util-resolve-all": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
      "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-sanitize-uri": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz",
      "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-encode": "^1.0.0",
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "node_modules/micromark-util-subtokenize": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz",
      "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ],

      "dependencies": {
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "node_modules/micromark-util-symbol": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz",
      "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ]

    },

    "node_modules/micromark-util-types": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.1.tgz",
      "integrity": "sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA==",
      "funding": [
        {
          "type": "GitHub Sponsors",
          "url": "https://github.com/sponsors/unifiedjs"
        },

        {
          "type": "OpenCollective",
          "url": "https://opencollective.com/unified"
        }

      ]

    },

    "node_modules/micromatch": {
      "version": "3.1.10",
      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -5925,8 +7145,7 @@
    "node_modules/ms": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
      "dev": true
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
    },

    "node_modules/nan": {
      "version": "2.15.0",
@@ -5989,6 +7208,15 @@
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/negotiator": {
      "version": "0.6.2",
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
      "dev": true,
      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/nice-try": {
@@ -6065,6 +7293,18 @@
      "dev": true,
      "engines": {
        "node": ">=6"
      }

    },

    "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": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
      "dev": true,
      "dependencies": {
        "path-key": "^2.0.0"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/nth-check": {
@@ -6271,6 +7511,15 @@
      "dependencies": {
        "ee-first": "1.1.1"
      },

      "engines": {
        "node": ">= 0.8"
      }

    },

    "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==",
      "dev": true,
      "engines": {
        "node": ">= 0.8"
      }

@@ -6347,6 +7596,15 @@
      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
      "dev": true
    },

    "node_modules/p-finally": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
      "dev": true,
      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/pako": {
      "version": "1.0.11",
@@ -6440,6 +7698,23 @@
        "evp_bytestokey": "^1.0.0",
        "pbkdf2": "^3.0.3",
        "safe-buffer": "^5.1.1"
      }

    },

    "node_modules/parse-entities": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
      "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
      "dependencies": {
        "character-entities": "^2.0.0",
        "character-entities-legacy": "^2.0.0",
        "character-reference-invalid": "^2.0.0",
        "is-alphanumerical": "^2.0.0",
        "is-decimal": "^2.0.0",
        "is-hexadecimal": "^2.0.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/parse-json": {
@@ -6499,6 +7774,12 @@
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "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": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
      "dev": true
    },

    "node_modules/path-key": {
      "version": "2.0.1",
@@ -7179,6 +8460,11 @@
        "node": ">= 0.8.0"
      }

    },

    "node_modules/prismjs": {
      "version": "1.24.1",
      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz",
      "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow=="
    },

    "node_modules/process": {
      "version": "0.11.10",
      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -7202,7 +8488,22 @@
        "loose-envify": "^1.4.0",
        "object-assign": "^4.1.1",
        "react-is": "^16.8.1"
      }

    },

    "node_modules/property-information": {
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
      "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/pseudomap": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
      "dev": true
    },

    "node_modules/psl": {
      "version": "1.8.0",
@@ -7229,6 +8530,16 @@
      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
      "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
      "dev": true
    },

    "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,
      "dependencies": {
        "end-of-stream": "^1.1.0",
        "once": "^1.3.1"
      }

    },

    "node_modules/punycode": {
      "version": "1.4.1",
@@ -7368,6 +8679,21 @@
      "dev": true,
      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/rc": {
      "version": "1.2.8",
      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
      "dev": true,
      "dependencies": {
        "deep-extend": "^0.6.0",
        "ini": "~1.3.0",
        "minimist": "^1.2.0",
        "strip-json-comments": "~2.0.1"
      },

      "bin": {
        "rc": "cli.js"
      }

    },

    "node_modules/react": {
@@ -7410,6 +8736,39 @@
      "version": "16.13.1",
      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
    },

    "node_modules/react-markdown": {
      "version": "7.0.1",
      "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-7.0.1.tgz",
      "integrity": "sha512-pthNPaoiwg0q7hukoE04F2ENwSzijIlWHJ4UMs/96LUe/G/P3FnbP4qHzx3FoNqae+2SqDG8vzniTLnJDeWneg==",
      "dependencies": {
        "@types/hast": "^2.0.0",
        "@types/unist": "^2.0.0",
        "comma-separated-tokens": "^2.0.0",
        "prop-types": "^15.0.0",
        "property-information": "^6.0.0",
        "react-is": "^17.0.0",
        "remark-parse": "^10.0.0",
        "remark-rehype": "^9.0.0",
        "space-separated-tokens": "^2.0.0",
        "style-to-object": "^0.3.0",
        "unified": "^10.0.0",
        "unist-util-visit": "^4.0.0",
        "vfile": "^5.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      },

      "peerDependencies": {
        "@types/react": ">=16",
        "react": ">=16"
      }

    },

    "node_modules/react-markdown/node_modules/react-is": {
      "version": "17.0.2",
      "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
    },

    "node_modules/react-router": {
      "version": "5.2.1",
@@ -7446,6 +8805,21 @@
      },

      "peerDependencies": {
        "react": ">=15"
      }

    },

    "node_modules/react-syntax-highlighter": {
      "version": "15.4.4",
      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.4.4.tgz",
      "integrity": "sha512-PsOFHNTzkb3OroXdoR897eKN5EZ6grht1iM+f1lJSq7/L0YVnkJaNVwC3wEUYPOAmeyl5xyer1DjL6MrumO6Zw==",
      "dependencies": {
        "@babel/runtime": "^7.3.1",
        "highlight.js": "^10.4.1",
        "lowlight": "^1.17.0",
        "prismjs": "^1.22.0",
        "refractor": "^3.2.0"
      },

      "peerDependencies": {
        "react": ">= 0.14.0"
      }

    },

    "node_modules/readable-stream": {
@@ -7484,6 +8858,104 @@
      },

      "engines": {
        "node": ">=0.10"
      }

    },

    "node_modules/refractor": {
      "version": "3.4.0",
      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.4.0.tgz",
      "integrity": "sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==",
      "dependencies": {
        "hastscript": "^6.0.0",
        "parse-entities": "^2.0.0",
        "prismjs": "~1.24.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "dependencies": {
        "is-alphabetical": "^1.0.0",
        "is-decimal": "^1.0.0"
      },

      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/node_modules/is-decimal": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
      "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/refractor/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==",
      "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"
      }

    },

    "node_modules/regenerate": {
@@ -7571,6 +9043,28 @@
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/registry-auth-token": {
      "version": "3.3.2",
      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
      "dev": true,
      "dependencies": {
        "rc": "^1.1.6",
        "safe-buffer": "^5.0.1"
      }

    },

    "node_modules/registry-url": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
      "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
      "dev": true,
      "dependencies": {
        "rc": "^1.0.1"
      },

      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/regjsgen": {
@@ -7607,6 +9101,50 @@
      "dev": true,
      "engines": {
        "node": ">= 0.10"
      }

    },

    "node_modules/remark-gfm": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz",
      "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "mdast-util-gfm": "^1.0.0",
        "micromark-extension-gfm": "^1.0.0",
        "unified": "^10.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/remark-parse": {
      "version": "10.0.0",
      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz",
      "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==",
      "dependencies": {
        "@types/mdast": "^3.0.0",
        "mdast-util-from-markdown": "^1.0.0",
        "unified": "^10.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/remark-rehype": {
      "version": "9.0.0",
      "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-9.0.0.tgz",
      "integrity": "sha512-SFA+mPWu45ynFPKeT3h5eNNVAYoMp3wizr3KSKh1IQ9L6dLSyD25/df6/vv8EW8ji3O3dnZGdbLQl592Tn+ydg==",
      "dependencies": {
        "@types/hast": "^2.0.0",
        "@types/mdast": "^3.0.0",
        "mdast-util-to-hast": "^11.0.0",
        "unified": "^10.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/remove-trailing-separator": {
@@ -8050,6 +9588,78 @@
      "dev": true,
      "engines": {
        "node": ">=4.0.0"
      }

    },

    "node_modules/serve": {
      "version": "12.0.1",
      "resolved": "https://registry.npmjs.org/serve/-/serve-12.0.1.tgz",
      "integrity": "sha512-CQ4ikLpxg/wmNM7yivulpS6fhjRiFG6OjmP8ty3/c1SBnSk23fpKmLAV4HboTA2KrZhkUPlDfjDhnRmAjQ5Phw==",
      "dev": true,
      "dependencies": {
        "@zeit/schemas": "2.6.0",
        "ajv": "6.12.6",
        "arg": "2.0.0",
        "boxen": "1.3.0",
        "chalk": "2.4.1",
        "clipboardy": "2.3.0",
        "compression": "1.7.3",
        "serve-handler": "6.1.3",
        "update-check": "1.5.2"
      },

      "bin": {
        "serve": "bin/serve.js"
      }

    },

    "node_modules/serve-handler": {
      "version": "6.1.3",
      "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz",
      "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==",
      "dev": true,
      "dependencies": {
        "bytes": "3.0.0",
        "content-disposition": "0.5.2",
        "fast-url-parser": "1.1.3",
        "mime-types": "2.1.18",
        "minimatch": "3.0.4",
        "path-is-inside": "1.0.2",
        "path-to-regexp": "2.2.1",
        "range-parser": "1.2.0"
      }

    },

    "node_modules/serve-handler/node_modules/mime-db": {
      "version": "1.33.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
      "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
      "dev": true,
      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/serve-handler/node_modules/mime-types": {
      "version": "2.1.18",
      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
      "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
      "dev": true,
      "dependencies": {
        "mime-db": "~1.33.0"
      },

      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/serve-handler/node_modules/path-to-regexp": {
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
      "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==",
      "dev": true
    },

    "node_modules/serve-handler/node_modules/range-parser": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
      "dev": true,
      "engines": {
        "node": ">= 0.6"
      }

    },

    "node_modules/serve-static": {
@@ -8065,6 +9675,20 @@
      },

      "engines": {
        "node": ">= 0.8.0"
      }

    },

    "node_modules/serve/node_modules/chalk": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
      "dev": true,
      "dependencies": {
        "ansi-styles": "^3.2.1",
        "escape-string-regexp": "^1.0.5",
        "supports-color": "^5.3.0"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/set-value": {
@@ -8318,6 +9942,11 @@
        "node": ">=0.10.0"
      }

    },

    "node_modules/source-code-pro": {
      "version": "2.38.0",
      "resolved": "https://registry.npmjs.org/source-code-pro/-/source-code-pro-2.38.0.tgz",
      "integrity": "sha512-JMXu7l3XrLREG17eEwY66ANG9716WTu6OeNvZfRKQKANEvbSERDZjk5AYTHeV6owQNPQTeiiW3ri2Ou93XFGvg=="
    },

    "node_modules/source-map": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -8355,6 +9984,15 @@
      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
      "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
      "dev": true
    },

    "node_modules/space-separated-tokens": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
      "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/split-string": {
      "version": "3.1.0",
@@ -8636,6 +10274,19 @@
          "url": "https://feross.org/support"
        }

      ]

    },

    "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"
      }

    },

    "node_modules/string.prototype.trimend": {
      "version": "1.0.4",
@@ -8667,12 +10318,38 @@
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
      "dev": true,
      "dependencies": {
        "ansi-regex": "^3.0.0"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/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,
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/strip-json-comments": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
      "dev": true,
      "engines": {
        "node": ">=0.10.0"
      }

    },

    "node_modules/style-to-object": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
      "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
      "dependencies": {
        "ansi-regex": "^3.0.0"
      },

      "engines": {
        "node": ">=4"
        "inline-style-parser": "0.1.1"
      }

    },

    "node_modules/stylehacks": {
@@ -8747,6 +10424,56 @@
      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
      "dev": true
    },

    "node_modules/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,
      "dependencies": {
        "execa": "^0.7.0"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/term-size/node_modules/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,
      "dependencies": {
        "lru-cache": "^4.0.1",
        "shebang-command": "^1.2.0",
        "which": "^1.2.9"
      }

    },

    "node_modules/term-size/node_modules/execa": {
      "version": "0.7.0",
      "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
      "dev": true,
      "dependencies": {
        "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"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/term-size/node_modules/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,
      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/terser": {
      "version": "3.17.0",
@@ -8936,6 +10663,15 @@
      "dev": true,
      "engines": {
        "node": ">=6"
      }

    },

    "node_modules/trough": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
      "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    },

    "node_modules/tty-browserify": {
@@ -9109,6 +10845,46 @@
      "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
      "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
      "dev": true
    },

    "node_modules/unified": {
      "version": "10.1.0",
      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
      "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "bail": "^2.0.0",
        "extend": "^3.0.0",
        "is-buffer": "^2.0.0",
        "is-plain-obj": "^4.0.0",
        "trough": "^2.0.0",
        "vfile": "^5.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unified/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==",
      "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/union-value": {
      "version": "1.0.1",
@@ -9136,6 +10912,97 @@
      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
      "dev": true
    },

    "node_modules/unist-builder": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
      "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
      "dependencies": {
        "@types/unist": "^2.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-generated": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
      "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-is": {
      "version": "5.1.1",
      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
      "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-position": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
      "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-stringify-position": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
      "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
      "dependencies": {
        "@types/unist": "^2.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-visit": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz",
      "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0",
        "unist-util-visit-parents": "^5.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-visit-parents": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
      "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz",
      "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/unquote": {
      "version": "1.1.1",
@@ -9199,6 +11066,16 @@
      "engines": {
        "node": ">=4",
        "yarn": "*"
      }

    },

    "node_modules/update-check": {
      "version": "1.5.2",
      "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz",
      "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==",
      "dev": true,
      "dependencies": {
        "registry-auth-token": "3.3.2",
        "registry-url": "3.1.0"
      }

    },

    "node_modules/uri-js": {
@@ -9307,6 +11184,15 @@
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
      "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
    },

    "node_modules/vary": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
      "dev": true,
      "engines": {
        "node": ">= 0.8"
      }

    },

    "node_modules/vendors": {
      "version": "1.0.4",
@@ -9337,6 +11223,56 @@
      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
      "dev": true
    },

    "node_modules/vfile": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
      "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "is-buffer": "^2.0.0",
        "unist-util-stringify-position": "^3.0.0",
        "vfile-message": "^3.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/vfile-message": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
      "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
      "dependencies": {
        "@types/unist": "^2.0.0",
        "unist-util-stringify-position": "^3.0.0"
      },

      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/unified"
      }

    },

    "node_modules/vfile/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==",
      "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/vlq": {
      "version": "0.2.3",
@@ -9437,6 +11373,18 @@
      },

      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }

    },

    "node_modules/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==",
      "dev": true,
      "dependencies": {
        "string-width": "^2.1.1"
      },

      "engines": {
        "node": ">=4"
      }

    },

    "node_modules/word-wrap": {
@@ -9479,9 +11427,23 @@
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
      "dev": true,
      "engines": {
        "node": ">=0.4"
      }

    },

    "node_modules/yallist": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
      "dev": true
    },

    "node_modules/zwitch": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
      "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==",
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/wooorm"
      }

    }

  },

@@ -10715,12 +12677,45 @@
      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz",
      "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==",
      "peer": true
    },

    "@types/debug": {
      "version": "4.1.7",
      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
      "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
      "requires": {
        "@types/ms": "*"
      }

    },

    "@types/hast": {
      "version": "2.3.4",
      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
      "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
      "requires": {
        "@types/unist": "*"
      }

    },

    "@types/mdast": {
      "version": "3.0.10",
      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
      "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
      "requires": {
        "@types/unist": "*"
      }

    },

    "@types/mdurl": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
      "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
    },

    "@types/ms": {
      "version": "0.7.31",
      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
      "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
    },

    "@types/prop-types": {
      "version": "15.7.4",
      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
      "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
      "dev": true
      "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ=="
    },

    "@types/q": {
      "version": "1.5.5",
@@ -10732,7 +12727,6 @@
      "version": "17.0.20",
      "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.20.tgz",
      "integrity": "sha512-wWZrPlihslrPpcKyCSlmIlruakxr57/buQN1RjlIeaaTWDLtJkTtRW429MoQJergvVKc4IWBpRhWw7YNh/7GVA==",
      "dev": true,
      "requires": {
        "@types/prop-types": "*",
        "@types/scheduler": "*",
@@ -10751,7 +12745,17 @@
    "@types/scheduler": {
      "version": "0.16.2",
      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
    },

    "@types/unist": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
    },

    "@zeit/schemas": {
      "version": "2.6.0",
      "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz",
      "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==",
      "dev": true
    },

    "abab": {
@@ -10759,6 +12763,16 @@
      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
      "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
      "dev": true
    },

    "accepts": {
      "version": "1.3.7",
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
      "dev": true,
      "requires": {
        "mime-types": "~2.1.24",
        "negotiator": "0.6.2"
      }

    },

    "acorn": {
      "version": "7.4.1",
@@ -10807,6 +12821,15 @@
      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
      "dev": true
    },

    "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"
      }

    },

    "ansi-regex": {
      "version": "3.0.0",
@@ -10852,6 +12875,18 @@
          }

        }

      }

    },

    "arch": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
      "dev": true
    },

    "arg": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
      "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
      "dev": true
    },

    "argparse": {
      "version": "1.0.10",
@@ -11092,6 +13127,11 @@
        "lodash.clone": "^4.5.0"
      }

    },

    "bail": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
      "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
    },

    "balanced-match": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -11172,10 +13212,20 @@
      "integrity": "sha512-/jUa4sSuDZWlDLQ1gwQQR8uoYSvLJzDd8m5o6bPKh3asLAMYVZKdRCjb1joUd5WXf0WwCNzd2EjwQQhupou0dA==",
      "requires": {}
    },

    "bootstrap-icons": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.5.0.tgz",
      "integrity": "sha512-44feMc7DE1Ccpsas/1wioN8ewFJNquvi5FewA06wLnqct7CwMdGDVy41ieHaacogzDqLfG8nADIvMNp9e4bfbA=="
    "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"
      }

    },

    "brace-expansion": {
      "version": "1.1.11",
@@ -11367,6 +13417,12 @@
      "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.0.0",
      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
      "dev": true
    },

    "cache-base": {
@@ -11424,6 +13480,12 @@
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
      "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
    },

    "caniuse-api": {
@@ -11449,6 +13511,11 @@
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
      "dev": true
    },

    "ccount": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz",
      "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA=="
    },

    "chalk": {
      "version": "2.4.2",
@@ -11460,6 +13527,21 @@
        "escape-string-regexp": "^1.0.5",
        "supports-color": "^5.3.0"
      }

    },

    "character-entities": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
      "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA=="
    },

    "character-entities-legacy": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
      "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
    },

    "character-reference-invalid": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
      "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g=="
    },

    "chokidar": {
      "version": "2.1.8",
@@ -11550,6 +13632,12 @@
          }

        }

      }

    },

    "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
    },

    "cli-cursor": {
      "version": "2.1.0",
@@ -11565,6 +13653,28 @@
      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
      "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
      "dev": true
    },

    "clipboardy": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
      "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
      "dev": true,
      "requires": {
        "arch": "^2.1.1",
        "execa": "^1.0.0",
        "is-wsl": "^2.1.1"
      },

      "dependencies": {
        "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,
          "requires": {
            "is-docker": "^2.0.0"
          }

        }

      }

    },

    "clone": {
      "version": "2.1.2",
@@ -11643,6 +13753,11 @@
        "delayed-stream": "~1.0.0"
      }

    },

    "comma-separated-tokens": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
      "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
    },

    "command-exists": {
      "version": "1.2.9",
      "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
@@ -11660,6 +13775,47 @@
      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
      "dev": true
    },

    "compressible": {
      "version": "2.0.18",
      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
      "dev": true,
      "requires": {
        "mime-db": ">= 1.43.0 < 2"
      }

    },

    "compression": {
      "version": "1.7.3",
      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
      "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
      "dev": true,
      "requires": {
        "accepts": "~1.3.5",
        "bytes": "3.0.0",
        "compressible": "~2.0.14",
        "debug": "2.6.9",
        "on-headers": "~1.0.1",
        "safe-buffer": "5.1.2",
        "vary": "~1.1.2"
      },

      "dependencies": {
        "debug": {
          "version": "2.6.9",
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
          "dev": true,
          "requires": {
            "ms": "2.0.0"
          }

        },

        "ms": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
          "dev": true
        }

      }

    },

    "concat-map": {
      "version": "0.0.1",
@@ -11691,6 +13847,12 @@
      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
      "dev": true
    },

    "content-disposition": {
      "version": "0.5.2",
      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
      "dev": true
    },

    "convert-source-map": {
      "version": "1.8.0",
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
@@ -12103,8 +14265,7 @@
    "csstype": {
      "version": "3.0.8",
      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
      "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
      "dev": true
      "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
    },

    "dashdash": {
      "version": "1.14.1",
@@ -12140,7 +14301,6 @@
      "version": "4.3.2",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
      "dev": true,
      "requires": {
        "ms": "2.1.2"
      }

@@ -12149,6 +14309,12 @@
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
      "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": {
@@ -12379,6 +14545,15 @@
      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
      "dev": true
    },

    "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"
      }

    },

    "entities": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@@ -12522,6 +14697,21 @@
      "requires": {
        "md5.js": "^1.3.4",
        "safe-buffer": "^5.1.1"
      }

    },

    "execa": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
      "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"
      }

    },

    "expand-brackets": {
@@ -12605,8 +14795,7 @@
    "extend": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
      "dev": true
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
    },

    "extend-shallow": {
      "version": "2.0.1",
@@ -12701,12 +14890,29 @@
      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },

    "fast-url-parser": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
      "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=",
      "dev": true,
      "requires": {
        "punycode": "^1.3.2"
      }

    },

    "fastparse": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
      "dev": true
    },

    "fault": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
      "requires": {
        "format": "^0.2.0"
      }

    },

    "file-uri-to-path": {
      "version": "1.0.0",
@@ -12760,6 +14966,11 @@
        "combined-stream": "^1.0.6",
        "mime-types": "^2.1.12"
      }

    },

    "format": {
      "version": "0.2.2",
      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
      "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs="
    },

    "fragment-cache": {
      "version": "0.2.1",
@@ -12821,6 +15032,15 @@
      "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
      "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
      "dev": true
    },

    "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"
      }

    },

    "get-symbol-description": {
      "version": "1.0.0",
@@ -13049,6 +15269,43 @@
      "requires": {
        "inherits": "^2.0.3",
        "minimalistic-assert": "^1.0.1"
      }

    },

    "hast-util-parse-selector": {
      "version": "2.2.5",
      "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
      "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ=="
    },

    "hastscript": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
      "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
      "requires": {
        "@types/hast": "^2.0.0",
        "comma-separated-tokens": "^1.0.0",
        "hast-util-parse-selector": "^2.0.0",
        "property-information": "^5.0.0",
        "space-separated-tokens": "^1.0.0"
      },

      "dependencies": {
        "comma-separated-tokens": {
          "version": "1.0.8",
          "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
          "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="
        },

        "property-information": {
          "version": "5.6.0",
          "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
          "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
          "requires": {
            "xtend": "^4.0.0"
          }

        },

        "space-separated-tokens": {
          "version": "1.1.5",
          "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
          "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="
        }

      }

    },

    "hex-color-regex": {
@@ -13057,6 +15314,11 @@
      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
      "dev": true
    },

    "highlight.js": {
      "version": "10.7.3",
      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="
    },

    "history": {
      "version": "4.10.1",
      "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
@@ -13334,7 +15596,18 @@
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
      "dev": true
    },

    "ini": {
      "version": "1.3.8",
      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
      "dev": true
    },

    "inline-style-parser": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
      "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
    },

    "internal-slot": {
      "version": "1.0.3",
@@ -13368,6 +15641,20 @@
          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
          "dev": true
        }

      }

    },

    "is-alphabetical": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
      "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w=="
    },

    "is-alphanumerical": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
      "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
      "requires": {
        "is-alphabetical": "^2.0.0",
        "is-decimal": "^2.0.0"
      }

    },

    "is-arrayish": {
@@ -13464,6 +15751,11 @@
      "requires": {
        "has-tostringtag": "^1.0.0"
      }

    },

    "is-decimal": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
      "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw=="
    },

    "is-descriptor": {
      "version": "1.0.2",
@@ -13488,6 +15780,12 @@
      "version": "0.3.1",
      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
      "dev": true
    },

    "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
    },

    "is-extendable": {
@@ -13500,6 +15798,12 @@
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
      "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
    },

    "is-glob": {
@@ -13510,6 +15814,11 @@
      "requires": {
        "is-extglob": "^2.1.1"
      }

    },

    "is-hexadecimal": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
      "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug=="
    },

    "is-html": {
      "version": "1.1.0",
@@ -13549,6 +15858,11 @@
      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
      "dev": true
    },

    "is-plain-obj": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
      "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
    },

    "is-plain-object": {
      "version": "2.0.4",
@@ -13573,6 +15887,12 @@
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
      "dev": true
    },

    "is-stream": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
      "dev": true
    },

    "is-string": {
@@ -13841,12 +16161,36 @@
        "chalk": "^2.0.1"
      }

    },

    "longest-streak": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.0.tgz",
      "integrity": "sha512-XhUjWR5CFaQ03JOP+iSDS9koy8T5jfoImCZ4XprElw3BXsSk4MpVYOLw/6LTDKZhO13PlAXnB5gS4MHQTpkSOw=="
    },

    "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"
      }

    },

    "lowlight": {
      "version": "1.20.0",
      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
      "requires": {
        "fault": "^1.0.0",
        "highlight.js": "~10.7.0"
      }

    },

    "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"
      }

    },

    "magic-string": {
@@ -13868,50 +16212,463 @@
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
      "dev": true,
      "requires": {
        "object-visit": "^1.0.0"
      }

    },

    "markdown-table": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.1.tgz",
      "integrity": "sha512-CBbaYXKSGnE1uLRpKA1SWgIRb2PQrpkllNWpZtZe6VojOJ4ysqiq7/2glYcmKsOYN09QgH/HEBX5hIshAeiK6A=="
    },

    "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": {
        "hash-base": "^3.0.0",
        "inherits": "^2.0.1",
        "safe-buffer": "^5.1.2"
      }

    },

    "mdast-util-definitions": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz",
      "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "unist-util-visit": "^3.0.0"
      },

      "dependencies": {
        "unist-util-visit": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
          "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
          "requires": {
            "@types/unist": "^2.0.0",
            "unist-util-is": "^5.0.0",
            "unist-util-visit-parents": "^4.0.0"
          }

        }

      }

    },

    "mdast-util-find-and-replace": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz",
      "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==",
      "requires": {
        "escape-string-regexp": "^5.0.0",
        "unist-util-is": "^5.0.0",
        "unist-util-visit-parents": "^4.0.0"
      },

      "dependencies": {
        "escape-string-regexp": {
          "version": "5.0.0",
          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
          "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
        }

      }

    },

    "mdast-util-from-markdown": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.0.tgz",
      "integrity": "sha512-uj2G60sb7z1PNOeElFwCC9b/Se/lFXuLhVKFOAY2EHz/VvgbupTQRNXPoZl7rGpXYL6BNZgcgaybrlSWbo7n/g==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "mdast-util-to-string": "^3.0.0",
        "micromark": "^3.0.0",
        "micromark-util-decode-numeric-character-reference": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0",
        "parse-entities": "^3.0.0",
        "unist-util-stringify-position": "^3.0.0"
      }

    },

    "mdast-util-gfm": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-1.0.0.tgz",
      "integrity": "sha512-JY4qImsTqivQ0Gl3qvdaizCpomFaNrHnjEhNjNNKeNEA5jZHAJDYu1+yO4V9jn4/ti8GrKdAScaT4F71knoxsA==",
      "requires": {
        "mdast-util-gfm-autolink-literal": "^1.0.0",
        "mdast-util-gfm-strikethrough": "^1.0.0",
        "mdast-util-gfm-table": "^1.0.0",
        "mdast-util-gfm-task-list-item": "^1.0.0"
      }

    },

    "mdast-util-gfm-autolink-literal": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.1.tgz",
      "integrity": "sha512-dCUDNYXCytIonTHIUOZXp5S3FWd1XAt6IVH1fBfH6BbUF9U+9m1T9XllfHPvKJCccKNI+0RlYmQJ0rfMTDxEtA==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "ccount": "^2.0.0",
        "mdast-util-find-and-replace": "^2.0.0",
        "micromark-util-character": "^1.0.0"
      }

    },

    "mdast-util-gfm-strikethrough": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.0.tgz",
      "integrity": "sha512-gM9ipBUdRxYa6Yq1Hd8Otg6jEn/dRxFZ1F9ZX4QHosHOexLGqNZO2dh0A+YFbUEd10RcKjnjb4jOfJJzoXXUew==",
      "requires": {
        "@types/mdast": "^3.0.3",
        "mdast-util-to-markdown": "^1.0.0"
      }

    },

    "mdast-util-gfm-table": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.1.tgz",
      "integrity": "sha512-NByKuaSg5+M6r9DZBPXFUmhMHGFf9u+WE76EeStN01ghi8hpnydiWBXr+qj0XCRWI7SAMNtEjGvip6zci9axQA==",
      "requires": {
        "markdown-table": "^3.0.0",
        "mdast-util-to-markdown": "^1.0.0"
      }

    },

    "mdast-util-gfm-task-list-item": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.0.tgz",
      "integrity": "sha512-dwkzOTjQe8JCCHVE3Cb0pLHTYLudf7t9WCAnb20jI8/dW+VHjgWhjtIUVA3oigNkssgjEwX+i+3XesUdCnXGyA==",
      "requires": {
        "@types/mdast": "^3.0.3",
        "mdast-util-to-markdown": "^1.0.0"
      }

    },

    "mdast-util-to-hast": {
      "version": "11.2.1",
      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.2.1.tgz",
      "integrity": "sha512-tvy3qzo/SKxkQ9smt7D7NX+4nAQng+eK4/A7PVUzAT4+n0NtgaDRyZA2DmGExAbW7xUX4O+4jkO2u94dNStssw==",
      "requires": {
        "@types/hast": "^2.0.0",
        "@types/mdast": "^3.0.0",
        "@types/mdurl": "^1.0.0",
        "mdast-util-definitions": "^5.0.0",
        "mdurl": "^1.0.0",
        "unist-builder": "^3.0.0",
        "unist-util-generated": "^2.0.0",
        "unist-util-position": "^4.0.0",
        "unist-util-visit": "^4.0.0"
      }

    },

    "mdast-util-to-markdown": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.1.tgz",
      "integrity": "sha512-yj0UexEfdH0Zqw9CztzC5+J6OZKgCY6K0ommn56SBlPKIV3NGqk1Wo/zw1Q0e/kHb50wmQ8O9cwbOl7vmaJjxg==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "@types/unist": "^2.0.0",
        "longest-streak": "^3.0.0",
        "mdast-util-to-string": "^3.0.0",
        "parse-entities": "^3.0.0",
        "unist-util-visit": "^4.0.0",
        "zwitch": "^2.0.0"
      }

    },

    "mdast-util-to-string": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
      "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA=="
    },

    "mdn-data": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
      "dev": true
    },

    "mdurl": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
    },

    "merge-source-map": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
      "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
      "dev": true,
      "requires": {
        "source-map": "^0.5.6"
      },

      "dependencies": {
        "source-map": {
          "version": "0.5.7",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
          "dev": true
        }

      }

    },

    "merge2": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
      "dev": true
    },

    "micromark": {
      "version": "3.0.5",
      "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.5.tgz",
      "integrity": "sha512-QfjERBnPw0G9mxhOCkkbRP0n8SX8lIBLrEKeEVceviUukqVMv3hWE4AgNTOK/W6GWqtPvvIHg2Apl3j1Dxm6aQ==",
      "requires": {
        "@types/debug": "^4.0.0",
        "debug": "^4.0.0",
        "micromark-core-commonmark": "^1.0.1",
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-combine-extensions": "^1.0.0",
        "micromark-util-decode-numeric-character-reference": "^1.0.0",
        "micromark-util-encode": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-sanitize-uri": "^1.0.0",
        "micromark-util-subtokenize": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.1",
        "parse-entities": "^3.0.0"
      }

    },

    "micromark-core-commonmark": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.1.tgz",
      "integrity": "sha512-vEOw8hcQ3nwHkKKNIyP9wBi8M50zjNajtmI+cCUWcVfJS+v5/3WCh4PLKf7PPRZFUutjzl4ZjlHwBWUKfb/SkA==",
      "requires": {
        "micromark-factory-destination": "^1.0.0",
        "micromark-factory-label": "^1.0.0",
        "micromark-factory-space": "^1.0.0",
        "micromark-factory-title": "^1.0.0",
        "micromark-factory-whitespace": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-classify-character": "^1.0.0",
        "micromark-util-html-tag-name": "^1.0.0",
        "micromark-util-normalize-identifier": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-subtokenize": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.1",
        "parse-entities": "^3.0.0"
      }

    },

    "micromark-extension-gfm": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-1.0.0.tgz",
      "integrity": "sha512-OjqbQPL1Vec/4l5hnC8WnMNmWwgrT9JvzR2udqIGrGKecZsdwY9GAWZ5482CuD12SXuHNj8aS8epni6ip0Pwog==",
      "requires": {
        "micromark-extension-gfm-autolink-literal": "^1.0.0",
        "micromark-extension-gfm-strikethrough": "^1.0.0",
        "micromark-extension-gfm-table": "^1.0.0",
        "micromark-extension-gfm-tagfilter": "^1.0.0",
        "micromark-extension-gfm-task-list-item": "^1.0.0",
        "micromark-util-combine-extensions": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-extension-gfm-autolink-literal": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.0.tgz",
      "integrity": "sha512-t+K0aPK32mXypVTEKV+WRfoT/Rb7MERDgHZVRr56NXpyQQhgMk72QnK4NljYUlrgbuesH+MxiPQwThzqRDIwvA==",
      "requires": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-sanitize-uri": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-extension-gfm-strikethrough": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.1.tgz",
      "integrity": "sha512-fzGYXWz9HPWH1uHqYwdyR8XpEtuoYVHUjTdPQTnl3ETVZOQe1NXMwE3RA7AMqeON52hG+kO9g1/P1+pLONBSMQ==",
      "requires": {
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-classify-character": "^1.0.0",
        "micromark-util-resolve-all": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-extension-gfm-table": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.0.tgz",
      "integrity": "sha512-OATRuHDgEAT/aaJJRSdU12V+s01kNSnJ0jumdfLq5mPy0F5DkR3zbTSFLH4tjVYM0/kEG6umxIhHY62mFe4z5Q==",
      "requires": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-extension-gfm-tagfilter": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.0.tgz",
      "integrity": "sha512-GGUZhzQrOdHR8RHU2ru6K+4LMlj+pBdNuXRtw5prOflDOk2hHqDB0xEgej1AHJ2VETeycX7tzQh2EmaTUOmSKg==",
      "requires": {
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-extension-gfm-task-list-item": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.0.tgz",
      "integrity": "sha512-3tkHCq1NNwijtwpjYba9+rl1yvQ4xYg8iQpUAfTJRyq8MtIEsBUF/vW6B9Gh8Qwy1hE2FmpyHhP4jnFAt61zLg==",
      "requires": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-factory-destination": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
      "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
      "requires": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-factory-label": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.0.tgz",
      "integrity": "sha512-XWEucVZb+qBCe2jmlOnWr6sWSY6NHx+wtpgYFsm4G+dufOf6tTQRRo0bdO7XSlGPu5fyjpJenth6Ksnc5Mwfww==",
      "requires": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-factory-space": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
      "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
      "requires": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-factory-title": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.0.tgz",
      "integrity": "sha512-flvC7Gx0dWVWorXuBl09Cr3wB5FTuYec8pMGVySIp2ZlqTcIjN/lFohZcP0EG//krTptm34kozHk7aK/CleCfA==",
      "requires": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-factory-whitespace": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
      "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
      "requires": {
        "micromark-factory-space": "^1.0.0",
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-util-character": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
      "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
      "requires": {
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-util-chunked": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
      "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
      "requires": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "micromark-util-classify-character": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
      "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
      "requires": {
        "micromark-util-character": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-util-combine-extensions": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
      "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
      "requires": {
        "micromark-util-chunked": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "micromark-util-decode-numeric-character-reference": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
      "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
      "requires": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "micromark-util-encode": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz",
      "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg=="
    },

    "micromark-util-html-tag-name": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz",
      "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g=="
    },

    "micromark-util-normalize-identifier": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
      "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
      "requires": {
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "micromark-util-resolve-all": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
      "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
      "requires": {
        "object-visit": "^1.0.0"
        "micromark-util-types": "^1.0.0"
      }

    },

    "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,
    "micromark-util-sanitize-uri": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz",
      "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==",
      "requires": {
        "hash-base": "^3.0.0",
        "inherits": "^2.0.1",
        "safe-buffer": "^5.1.2"
        "micromark-util-character": "^1.0.0",
        "micromark-util-encode": "^1.0.0",
        "micromark-util-symbol": "^1.0.0"
      }

    },

    "mdn-data": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
      "dev": true
    },

    "merge-source-map": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
      "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
      "dev": true,
    "micromark-util-subtokenize": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.0.tgz",
      "integrity": "sha512-EsnG2qscmcN5XhkqQBZni/4oQbLFjz9yk3ZM/P8a3YUjwV6+6On2wehr1ALx0MxK3+XXXLTzuBKHDFeDFYRdgQ==",
      "requires": {
        "source-map": "^0.5.6"
      },

      "dependencies": {
        "source-map": {
          "version": "0.5.7",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
          "dev": true
        }

        "micromark-util-chunked": "^1.0.0",
        "micromark-util-symbol": "^1.0.0",
        "micromark-util-types": "^1.0.0"
      }

    },

    "merge2": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
      "dev": true
    "micromark-util-symbol": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz",
      "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ=="
    },

    "micromark-util-types": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.1.tgz",
      "integrity": "sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA=="
    },

    "micromatch": {
      "version": "3.1.10",
@@ -14075,8 +16832,7 @@
    "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
      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
    },

    "nan": {
      "version": "2.15.0",
@@ -14131,6 +16887,12 @@
        }

      }

    },

    "negotiator": {
      "version": "0.6.2",
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
      "dev": true
    },

    "nice-try": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -14197,6 +16959,15 @@
      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
      "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
      "dev": true
    },

    "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=",
      "dev": true,
      "requires": {
        "path-key": "^2.0.0"
      }

    },

    "nth-check": {
      "version": "1.0.2",
@@ -14355,6 +17126,12 @@
      "requires": {
        "ee-first": "1.1.1"
      }

    },

    "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==",
      "dev": true
    },

    "once": {
      "version": "1.4.0",
@@ -14415,6 +17192,12 @@
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
      "dev": true
    },

    "p-finally": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
      "dev": true
    },

    "pako": {
@@ -14501,6 +17284,19 @@
        "evp_bytestokey": "^1.0.0",
        "pbkdf2": "^3.0.3",
        "safe-buffer": "^5.1.1"
      }

    },

    "parse-entities": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
      "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
      "requires": {
        "character-entities": "^2.0.0",
        "character-entities-legacy": "^2.0.0",
        "character-reference-invalid": "^2.0.0",
        "is-alphanumerical": "^2.0.0",
        "is-decimal": "^2.0.0",
        "is-hexadecimal": "^2.0.0"
      }

    },

    "parse-json": {
@@ -14547,6 +17343,12 @@
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
      "dev": true
    },

    "path-is-inside": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
      "dev": true
    },

    "path-key": {
@@ -15113,6 +17915,11 @@
      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
      "dev": true
    },

    "prismjs": {
      "version": "1.24.1",
      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz",
      "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow=="
    },

    "process": {
      "version": "0.11.10",
      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -15134,6 +17941,17 @@
        "object-assign": "^4.1.1",
        "react-is": "^16.8.1"
      }

    },

    "property-information": {
      "version": "6.0.1",
      "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
      "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
    },

    "pseudomap": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
      "dev": true
    },

    "psl": {
      "version": "1.8.0",
@@ -15161,6 +17979,16 @@
          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
          "dev": true
        }

      }

    },

    "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": {
        "end-of-stream": "^1.1.0",
        "once": "^1.3.1"
      }

    },

    "punycode": {
@@ -15268,6 +18096,18 @@
      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
      "dev": true
    },

    "rc": {
      "version": "1.2.8",
      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
      "dev": true,
      "requires": {
        "deep-extend": "^0.6.0",
        "ini": "~1.3.0",
        "minimist": "^1.2.0",
        "strip-json-comments": "~2.0.1"
      }

    },

    "react": {
      "version": "17.0.2",
@@ -15300,6 +18140,33 @@
      "version": "16.13.1",
      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
    },

    "react-markdown": {
      "version": "7.0.1",
      "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-7.0.1.tgz",
      "integrity": "sha512-pthNPaoiwg0q7hukoE04F2ENwSzijIlWHJ4UMs/96LUe/G/P3FnbP4qHzx3FoNqae+2SqDG8vzniTLnJDeWneg==",
      "requires": {
        "@types/hast": "^2.0.0",
        "@types/unist": "^2.0.0",
        "comma-separated-tokens": "^2.0.0",
        "prop-types": "^15.0.0",
        "property-information": "^6.0.0",
        "react-is": "^17.0.0",
        "remark-parse": "^10.0.0",
        "remark-rehype": "^9.0.0",
        "space-separated-tokens": "^2.0.0",
        "style-to-object": "^0.3.0",
        "unified": "^10.0.0",
        "unist-util-visit": "^4.0.0",
        "vfile": "^5.0.0"
      },

      "dependencies": {
        "react-is": {
          "version": "17.0.2",
          "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
          "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
        }

      }

    },

    "react-router": {
      "version": "5.2.1",
@@ -15332,6 +18199,18 @@
        "tiny-warning": "^1.0.0"
      }

    },

    "react-syntax-highlighter": {
      "version": "15.4.4",
      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.4.4.tgz",
      "integrity": "sha512-PsOFHNTzkb3OroXdoR897eKN5EZ6grht1iM+f1lJSq7/L0YVnkJaNVwC3wEUYPOAmeyl5xyer1DjL6MrumO6Zw==",
      "requires": {
        "@babel/runtime": "^7.3.1",
        "highlight.js": "^10.4.1",
        "lowlight": "^1.17.0",
        "prismjs": "^1.22.0",
        "refractor": "^3.2.0"
      }

    },

    "readable-stream": {
      "version": "2.3.7",
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@@ -15367,6 +18246,70 @@
        "graceful-fs": "^4.1.11",
        "micromatch": "^3.1.10",
        "readable-stream": "^2.0.2"
      }

    },

    "refractor": {
      "version": "3.4.0",
      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.4.0.tgz",
      "integrity": "sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==",
      "requires": {
        "hastscript": "^6.0.0",
        "parse-entities": "^2.0.0",
        "prismjs": "~1.24.0"
      },

      "dependencies": {
        "character-entities": {
          "version": "1.2.4",
          "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
          "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
        },

        "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=="
        },

        "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=="
        },

        "is-alphabetical": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
          "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
        },

        "is-alphanumerical": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
          "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
          "requires": {
            "is-alphabetical": "^1.0.0",
            "is-decimal": "^1.0.0"
          }

        },

        "is-decimal": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
          "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="
        },

        "is-hexadecimal": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
          "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
        },

        "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==",
          "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"
          }

        }

      }

    },

    "regenerate": {
@@ -15441,8 +18384,27 @@
        "regjsparser": "^0.6.4",
        "unicode-match-property-ecmascript": "^1.0.4",
        "unicode-match-property-value-ecmascript": "^1.2.0"
      }

    },

    "registry-auth-token": {
      "version": "3.3.2",
      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
      "dev": true,
      "requires": {
        "rc": "^1.1.6",
        "safe-buffer": "^5.0.1"
      }

    },

    "registry-url": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
      "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
      "dev": true,
      "requires": {
        "rc": "^1.0.1"
      }

    },

    "regjsgen": {
      "version": "0.5.2",
      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
@@ -15471,7 +18433,39 @@
      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
      "dev": true
    },

    "remark-gfm": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-2.0.0.tgz",
      "integrity": "sha512-waIv4Tjcd2CTUDxKRYzuPyIHw1FoX4H2GjXAzXV9PxQWb+dU4fJivd/FZ+nxyzPARrqTjMIkwIwPoWNbpBhjcQ==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "mdast-util-gfm": "^1.0.0",
        "micromark-extension-gfm": "^1.0.0",
        "unified": "^10.0.0"
      }

    },

    "remark-parse": {
      "version": "10.0.0",
      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz",
      "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==",
      "requires": {
        "@types/mdast": "^3.0.0",
        "mdast-util-from-markdown": "^1.0.0",
        "unified": "^10.0.0"
      }

    },

    "remark-rehype": {
      "version": "9.0.0",
      "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-9.0.0.tgz",
      "integrity": "sha512-SFA+mPWu45ynFPKeT3h5eNNVAYoMp3wizr3KSKh1IQ9L6dLSyD25/df6/vv8EW8ji3O3dnZGdbLQl592Tn+ydg==",
      "requires": {
        "@types/hast": "^2.0.0",
        "@types/mdast": "^3.0.0",
        "mdast-util-to-hast": "^11.0.0",
        "unified": "^10.0.0"
      }

    },

    "remove-trailing-separator": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -15824,6 +18818,81 @@
      "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.1.tgz",
      "integrity": "sha512-F+NGU0UHMBO4Q965tjw7rvieNVjlH6Lqi2emq/Lc9LUURYJbiCzmpi4Cy1OOjjVPtxu0c+NE85LU6968Wko5ZA==",
      "dev": true
    },

    "serve": {
      "version": "12.0.1",
      "resolved": "https://registry.npmjs.org/serve/-/serve-12.0.1.tgz",
      "integrity": "sha512-CQ4ikLpxg/wmNM7yivulpS6fhjRiFG6OjmP8ty3/c1SBnSk23fpKmLAV4HboTA2KrZhkUPlDfjDhnRmAjQ5Phw==",
      "dev": true,
      "requires": {
        "@zeit/schemas": "2.6.0",
        "ajv": "6.12.6",
        "arg": "2.0.0",
        "boxen": "1.3.0",
        "chalk": "2.4.1",
        "clipboardy": "2.3.0",
        "compression": "1.7.3",
        "serve-handler": "6.1.3",
        "update-check": "1.5.2"
      },

      "dependencies": {
        "chalk": {
          "version": "2.4.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
          "dev": true,
          "requires": {
            "ansi-styles": "^3.2.1",
            "escape-string-regexp": "^1.0.5",
            "supports-color": "^5.3.0"
          }

        }

      }

    },

    "serve-handler": {
      "version": "6.1.3",
      "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz",
      "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==",
      "dev": true,
      "requires": {
        "bytes": "3.0.0",
        "content-disposition": "0.5.2",
        "fast-url-parser": "1.1.3",
        "mime-types": "2.1.18",
        "minimatch": "3.0.4",
        "path-is-inside": "1.0.2",
        "path-to-regexp": "2.2.1",
        "range-parser": "1.2.0"
      },

      "dependencies": {
        "mime-db": {
          "version": "1.33.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
          "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
          "dev": true
        },

        "mime-types": {
          "version": "2.1.18",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
          "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
          "dev": true,
          "requires": {
            "mime-db": "~1.33.0"
          }

        },

        "path-to-regexp": {
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
          "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==",
          "dev": true
        },

        "range-parser": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
          "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
          "dev": true
        }

      }

    },

    "serve-static": {
      "version": "1.14.1",
@@ -16049,6 +19118,11 @@
      "requires": {
        "kind-of": "^3.2.0"
      }

    },

    "source-code-pro": {
      "version": "2.38.0",
      "resolved": "https://registry.npmjs.org/source-code-pro/-/source-code-pro-2.38.0.tgz",
      "integrity": "sha512-JMXu7l3XrLREG17eEwY66ANG9716WTu6OeNvZfRKQKANEvbSERDZjk5AYTHeV6owQNPQTeiiW3ri2Ou93XFGvg=="
    },

    "source-map": {
      "version": "0.6.1",
@@ -16085,6 +19159,11 @@
      "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
      "dev": true
    },

    "space-separated-tokens": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
      "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
    },

    "split-string": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -16304,6 +19383,16 @@
          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
          "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"
      }

    },

    "string.prototype.trimend": {
@@ -16333,6 +19422,26 @@
      "dev": true,
      "requires": {
        "ansi-regex": "^3.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
    },

    "strip-json-comments": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
      "dev": true
    },

    "style-to-object": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
      "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
      "requires": {
        "inline-style-parser": "0.1.1"
      }

    },

    "stylehacks": {
@@ -16394,6 +19503,49 @@
      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
      "dev": true
    },

    "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
        }

      }

    },

    "terser": {
      "version": "3.17.0",
@@ -16552,6 +19704,11 @@
        }

      }

    },

    "trough": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
      "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
    },

    "tty-browserify": {
      "version": "0.0.0",
      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -16685,6 +19842,27 @@
          "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
          "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
          "dev": true
        }

      }

    },

    "unified": {
      "version": "10.1.0",
      "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
      "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
      "requires": {
        "@types/unist": "^2.0.0",
        "bail": "^2.0.0",
        "extend": "^3.0.0",
        "is-buffer": "^2.0.0",
        "is-plain-obj": "^4.0.0",
        "trough": "^2.0.0",
        "vfile": "^5.0.0"
      },

      "dependencies": {
        "is-buffer": {
          "version": "2.0.5",
          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
        }

      }

    },

@@ -16711,7 +19889,68 @@
      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
      "dev": true
    },

    "unist-builder": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
      "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
      "requires": {
        "@types/unist": "^2.0.0"
      }

    },

    "unist-util-generated": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
      "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw=="
    },

    "unist-util-is": {
      "version": "5.1.1",
      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
      "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
    },

    "unist-util-position": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
      "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA=="
    },

    "unist-util-stringify-position": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
      "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
      "requires": {
        "@types/unist": "^2.0.0"
      }

    },

    "unist-util-visit": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.0.0.tgz",
      "integrity": "sha512-3HWTvrtU10/E7qgPznBfiOyG0TXj9W8c1GSfaI8L9GkaG1pLePiQPZ7E35a0R3ToQ/zcy4Im6aZ9WBgOTnv1MQ==",
      "requires": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0",
        "unist-util-visit-parents": "^5.0.0"
      },

      "dependencies": {
        "unist-util-visit-parents": {
          "version": "5.0.0",
          "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.0.0.tgz",
          "integrity": "sha512-CVaLOYPM/EaFTYMytbaju3Tw4QI3DHnHFnL358FkEu0hZOzSm/hqBdVwOQDR60jF5ZzhB1tlZlRH0ll/yekZIQ==",
          "requires": {
            "@types/unist": "^2.0.0",
            "unist-util-is": "^5.0.0"
          }

        }

      }

    },

    "unist-util-visit-parents": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
      "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
      "requires": {
        "@types/unist": "^2.0.0",
        "unist-util-is": "^5.0.0"
      }

    },

    "unquote": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
@@ -16763,6 +20002,16 @@
      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
      "dev": true
    },

    "update-check": {
      "version": "1.5.2",
      "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz",
      "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==",
      "dev": true,
      "requires": {
        "registry-auth-token": "3.3.2",
        "registry-url": "3.1.0"
      }

    },

    "uri-js": {
      "version": "4.4.1",
@@ -16863,6 +20112,12 @@
      "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
      "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
    },

    "vary": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
      "dev": true
    },

    "vendors": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
@@ -16885,7 +20140,34 @@
          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
          "dev": true
        }

      }

    },

    "vfile": {
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
      "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
      "requires": {
        "@types/unist": "^2.0.0",
        "is-buffer": "^2.0.0",
        "unist-util-stringify-position": "^3.0.0",
        "vfile-message": "^3.0.0"
      },

      "dependencies": {
        "is-buffer": {
          "version": "2.0.5",
          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
        }

      }

    },

    "vfile-message": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
      "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
      "requires": {
        "@types/unist": "^2.0.0",
        "unist-util-stringify-position": "^3.0.0"
      }

    },

    "vlq": {
@@ -16981,6 +20263,15 @@
        "is-number-object": "^1.0.4",
        "is-string": "^1.0.5",
        "is-symbol": "^1.0.3"
      }

    },

    "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==",
      "dev": true,
      "requires": {
        "string-width": "^2.1.1"
      }

    },

    "word-wrap": {
@@ -17019,8 +20310,18 @@
    "xtend": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
    },

    "yallist": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
      "dev": true
    },

    "zwitch": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
      "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA=="
    }

  }

}

diff --git a/chartered-frontend/package.json b/chartered-frontend/package.json
index c51e6e5..c51949e 100644
--- a/chartered-frontend/package.json
+++ a/chartered-frontend/package.json
@@ -5,7 +5,8 @@
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "parcel index.html --open"
    "start": "parcel index.html --open",
    "build": "parcel build index.html"
  },

  "keywords": [],
  "author": "",
@@ -15,14 +16,18 @@
    "@types/react-dom": "^17.0.9",
    "parcel-bundler": "^1.12.5",
    "sass": "^1.39.2",
    "serve": "^12.0.1",
    "typescript": "^4.4.2"
  },

  "dependencies": {
    "bootstrap": "^5.1.1",
    "bootstrap-icons": "^1.5.0",
    "react": "^17.0.2",
    "react-bootstrap-icons": "^1.5.0",
    "react-dom": "^17.0.2",
    "react-router-dom": "^5.3.0"
    "react-markdown": "^7.0.1",
    "react-router-dom": "^5.3.0",
    "react-syntax-highlighter": "^15.4.4",
    "remark-gfm": "^2.0.0",
    "source-code-pro": "^2.38.0"
  }

}

diff --git a/chartered-frontend/src/index.sass b/chartered-frontend/src/index.sass
index ff8a630..7238dad 100644
--- a/chartered-frontend/src/index.sass
+++ a/chartered-frontend/src/index.sass
@@ -1,6 +1,16 @@
$primary: #0d6efd
$font-family-monospace: "Source Code Pro", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace

@import "~bootstrap/scss/bootstrap.scss"
@import "../node_modules/source-code-pro/source-code-pro.css"

html, body
    background: $primary
html
    background: white

body
    background: $primary

code
    background: #f5f2f0
    padding: .1rem .2rem
    border-radius: 3px
diff --git a/chartered-frontend/src/index.tsx b/chartered-frontend/src/index.tsx
index cb840d5..0567dd3 100644
--- a/chartered-frontend/src/index.tsx
+++ a/chartered-frontend/src/index.tsx
@@ -1,5 +1,7 @@
import "./index.sass";

import './overscrollColourFixer.ts';

import React = require("react");
import ReactDOM = require("react-dom");
import {
@@ -14,6 +16,7 @@

import Login from "./pages/Login";
import Dashboard from "./pages/Dashboard";
import SingleCrate from "./pages/SingleCrate";

function App() {
    return (
@@ -24,6 +27,7 @@

                    <PrivateRoute exact path="/" component={() => <Redirect to="/dashboard" />} />
                    <PrivateRoute exact path="/dashboard" component={() => <Dashboard />} />
                    <PrivateRoute exact path="/crates/:crate" component={() => <SingleCrate />} />
                </Switch>
            </Router>
        </ProvideAuth>
diff --git a/chartered-frontend/src/overscrollColourFixer.ts b/chartered-frontend/src/overscrollColourFixer.ts
new file mode 100644
index 0000000..5945818 100644
--- /dev/null
+++ a/chartered-frontend/src/overscrollColourFixer.ts
@@ -1,0 +1,19 @@
// A quick little utility to fix the overscroll colour at the bottom
// of the page vs the top of the page. We don't have a footer so we
// just want to carry on the body background, whereas the header is
// white so we want to use that at the top of the page.

window.addEventListener('load', () => {
    let ticking;

    window.addEventListener('scroll', function (event) {
        if (!ticking) {
            ticking = true;

            window.requestAnimationFrame(() => {
                document.documentElement.style.backgroundColor = (window.scrollY > 70) ? 'var(--bs-primary)' : '#fff';
                ticking = false;
            });
        }
    }, false);
});
diff --git a/chartered-frontend/src/useAuth.tsx b/chartered-frontend/src/useAuth.tsx
index f7d317f..ffd4b31 100644
--- a/chartered-frontend/src/useAuth.tsx
+++ a/chartered-frontend/src/useAuth.tsx
@@ -1,8 +1,8 @@
import React = require('react');
import { useState, useEffect, useContext, createContext } from "react";
import { BASE_URL } from "./util";
import { unauthenticatedEndpoint } from "./util";

interface AuthContext {
export interface AuthContext {
    authKey?: string,
    expires?: Date,
    login: (username: string, password: string) => Promise<void>,
@@ -29,7 +29,7 @@
    }, [authKey, expires]);

    const login = async (username: string, password: string) => {
        let res = await fetch(`${BASE_URL}/a/-/login`, {
        let res = await fetch(unauthenticatedEndpoint('login'), {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
diff --git a/chartered-frontend/src/util.tsx b/chartered-frontend/src/util.tsx
index e535a03..d369f7a 100644
--- a/chartered-frontend/src/util.tsx
+++ a/chartered-frontend/src/util.tsx
@@ -1,1 +1,11 @@
import { AuthContext } from "./useAuth";

export const BASE_URL = 'http://localhost:8888';

export function unauthenticatedEndpoint(endpoint: string): string {
    return `${BASE_URL}/a/-/web/v1/${endpoint}`;
}

export function authenticatedEndpoint(auth: AuthContext, endpoint: string): string {
    return `${BASE_URL}/a/${auth.authKey}/web/v1/${endpoint}`;
}
diff --git a/chartered-web/src/main.rs b/chartered-web/src/main.rs
index c521a93..f9adac0 100644
--- a/chartered-web/src/main.rs
+++ a/chartered-web/src/main.rs
@@ -68,16 +68,26 @@
            .into_inner(),
    );

    let api_unauthenticated =
        axum_box_after_every_route!(Router::new().route("/login", post(endpoints::login::handle)));
    let web_unauthenticated =
        axum_box_after_every_route!(Router::new().route("/login", post(endpoints::web_api::login)));

    let web_authenticated = axum_box_after_every_route!(
        Router::new().route("/crates/:crate", get(endpoints::web_api::crate_info))
    )
    .layer(
        ServiceBuilder::new()
            .layer_fn(middleware::auth::AuthMiddleware)
            .into_inner(),
    );

    let middleware_stack = ServiceBuilder::new()
        .layer_fn(middleware::logging::LoggingMiddleware)
        .into_inner();

    let app = Router::new()
        .route("/", get(hello_world))
        .nest("/a/-", api_unauthenticated)
        .nest("/a/:key/web/v1", web_authenticated)
        .nest("/a/-/web/v1", web_unauthenticated)
        .nest("/a/:key/api/v1", api_authenticated)
        .layer(middleware_stack)
        // TODO!!!
diff --git a/chartered-frontend/src/pages/Dashboard.tsx b/chartered-frontend/src/pages/Dashboard.tsx
index 1478616..c01f663 100644
--- a/chartered-frontend/src/pages/Dashboard.tsx
+++ a/chartered-frontend/src/pages/Dashboard.tsx
@@ -1,146 +1,77 @@
import React = require('react');

import { Link } from "react-router-dom";
import { useAuth } from '../useAuth';
import Nav from "../sections/Nav";
import { ChevronRight } from 'react-bootstrap-icons';

export default function Dashboard() {
    const auth = useAuth();

    const recentlyUpdated = [
        {
            name: "hello-world-rs",
            version: "0.0.1",
        },
        {
            name: "cool-beans-rs",
            version: "0.0.1",
        }
    ];

    return (
        <div className="text-white">
            <nav className="navbar navbar-expand-lg navbar-light bg-white shadow-sm">
                <div className="container-fluid">
                    <a className="navbar-brand" href="#">✈️ chartered</a>
                    <button className="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span className="navbar-toggler-icon"></span>
                    </button>

                    <div className="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul className="navbar-nav me-auto mb-2 mb-lg-0">
                            <li className="nav-item">
                                <a className="nav-link active" aria-current="page" href="#">Home</a>
                            </li>
                            <li className="nav-item">
                                <a className="nav-link" href="#">Link</a>
                            </li>
                            <li className="nav-item dropdown">
                                <a className="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                                    Dropdown
                                </a>

                                <ul className="dropdown-menu" aria-labelledby="navbarDropdown">
                                    <li><a className="dropdown-item" href="#">Action</a></li>
                                    <li><a className="dropdown-item" href="#">Another action</a></li>
                                    <li><hr className="dropdown-divider"></li>
                                    <li><a className="dropdown-item" href="#">Something else here</a></li>
                                </ul>
                            </li>

                            <li className="nav-item">
                                <a className="nav-link disabled" href="#" taIndex="-1" aria-disabled="true">Disabled</a>
                            </li>
                        </ul>

                        <form className="d-flex">
                            <input className="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
                            <button className="btn btn-outline-success" type="submit">Search</button>
                        </form>
                    </div>
                </div>
            </nav>
            <Nav />

            <div className="container my-4">
            <div className="container mt-4 pb-4">
                <h1 className="mb-0">Welcome to Chartered.</h1>
                <p style={{maxWidth: '72ch'}}>
                    A private, authenticated Cargo registry. Everything published to this registry is <em>private and visible only to you</em>,
                    until explicit permissions are granted to others.
                </p>
                <div className="btn btn-light btn-lg shadow-sm">Getting Started</div>
                <a href="https://github.com/w4/chartered" target="_blank" className="btn btn-outline-light shadow-sm">Getting Started</a>

                <hr />

                <div className="row">
                    <div className="col-md-4">
                        <h4>Your Crates</h4>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">hello-world-rs <small>(owner)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">cool-beans-rs <small>(contributor)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>
                        { recentlyUpdated.map((v) => <CrateCard key={v.name} crate={v} />) }
                    </div>

                    <div className="col-md-4">
                        <h4>Recently Updated</h4>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">hello-world-rs <small>(owner)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">cool-beans-rs <small>(contributor)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>
                        { recentlyUpdated.map((v) => <CrateCard key={v.name} crate={v} />) }
                    </div>

                    <div className="col-md-4">
                        <h4>Most Downloaded</h4>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">hello-world-rs <small>(owner)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>

                        <div className="card border-0 mb-2 shadow-sm">
                            <div className="card-body text-black d-flex flex-row">
                                <div className="flex-grow-1 align-self-center">
                                    <h6 className="text-primary my-0">cool-beans-rs <small>(contributor)</small></h6>
                                    <small className="text-secondary">v0.0.1</small>
                                </div>

                                <ChevronRight size={16} className="align-self-center" />
                            </div>
                        </div>
                        { recentlyUpdated.map((v) => <CrateCard key={v.name} crate={v} />) }
                    </div>
                </div>

                <a onClick={() => auth.logout()}>logout</a>
            </div>
        </div>
    );
}

interface Crate {
    name: string;
    version: string;
}

function CrateCard({ crate }: { crate: Crate }) {
    return (
        <Link to={`/crates/${crate.name}`} className="text-decoration-none">
            <div className="card border-0 mb-2 shadow-sm">
                <div className="card-body text-black d-flex flex-row">
                    <div className="flex-grow-1 align-self-center">
                        <h6 className="text-primary my-0">{crate.name}</h6>
                        <small className="text-secondary">v{crate.version}</small>
                    </div>

                    <ChevronRight size={16} className="align-self-center" />
                </div>
            </div>
        </Link>
    );
}
diff --git a/chartered-frontend/src/pages/SingleCrate.tsx b/chartered-frontend/src/pages/SingleCrate.tsx
new file mode 100644
index 0000000..baa128f 100644
--- /dev/null
+++ a/chartered-frontend/src/pages/SingleCrate.tsx
@@ -1,0 +1,294 @@
import React = require('react');

import { useState, useEffect } from 'react';

import { Link } from "react-router-dom";
import { useAuth } from '../useAuth';
import Nav from "../sections/Nav";
import { Box } from 'react-bootstrap-icons';
import { useParams } from "react-router-dom";
import { authenticatedEndpoint } from '../util';

import Prism from 'react-syntax-highlighter/dist/cjs/prism';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';

export default function SingleCrate() {
    const auth = useAuth();
    const { crate } = useParams();

    const [crateInfo, setCrateInfo] = useState(null);

    useEffect(async () => {
        let res = await fetch(authenticatedEndpoint(auth, `crates/${crate}`));
        let json = await res.json();
        setCrateInfo(json);
    }, []);

    if (!crateInfo) {
        return (<div>Loading...</div>);
    }

    const crateVersion = crateInfo.versions[crateInfo.versions.length - 1];

    const readme = `
# Rand

[![Test Status](https://github.com/rust-random/rand/workflows/Tests/badge.svg?event=push)](https://github.com/rust-random/rand/actions)
[![Crate](https://img.shields.io/crates/v/rand.svg)](https://crates.io/crates/rand)
[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand/rand)
[![API](https://docs.rs/rand/badge.svg)](https://docs.rs/rand)
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.36+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)

A Rust library for random number generation, featuring:

-   Easy random value generation and usage via the [\`Rng\`](https://docs.rs/rand/*/rand/trait.Rng.html),
    [\`SliceRandom\`](https://docs.rs/rand/*/rand/seq/trait.SliceRandom.html) and
    [\`IteratorRandom\`](https://docs.rs/rand/*/rand/seq/trait.IteratorRandom.html) traits
-   Secure seeding via the [\`getrandom\` crate](https://crates.io/crates/getrandom)
    and fast, convenient generation via [\`thread_rng\`](https://docs.rs/rand/*/rand/fn.thread_rng.html)
-   A modular design built over [\`rand_core\`](https://crates.io/crates/rand_core)
    ([see the book](https://rust-random.github.io/book/crates.html))
-   Fast implementations of the best-in-class [cryptographic](https://rust-random.github.io/book/guide-rngs.html#cryptographically-secure-pseudo-random-number-generators-csprngs) and
    [non-cryptographic](https://rust-random.github.io/book/guide-rngs.html#basic-pseudo-random-number-generators-prngs) generators
-   A flexible [\`distributions\`](https://docs.rs/rand/*/rand/distributions/index.html) module
-   Samplers for a large number of random number distributions via our own
    [\`rand_distr\`](https://docs.rs/rand_distr) and via
    the [\`statrs\`](https://docs.rs/statrs/0.13.0/statrs/)
-   [Portably reproducible output](https://rust-random.github.io/book/portability.html)
-   \`#[no_std]\` compatibility (partial)
-   *Many* performance optimisations

It's also worth pointing out what \`rand\` *is not*:

-   Small. Most low-level crates are small, but the higher-level \`rand\` and
    \`rand_distr\` each contain a lot of functionality.
-   Simple (implementation). We have a strong focus on correctness, speed and flexibility, but
    not simplicity. If you prefer a small-and-simple library, there are
    alternatives including [fastrand](https://crates.io/crates/fastrand)
    and [oorandom](https://crates.io/crates/oorandom).
-   Slow. We take performance seriously, with considerations also for set-up
    time of new distributions, commonly-used parameters, and parameters of the
    current sampler.

Documentation:

-   [The Rust Rand Book](https://rust-random.github.io/book)
-   [API reference (master branch)](https://rust-random.github.io/rand)
-   [API reference (docs.rs)](https://docs.rs/rand)


## Usage

Add this to your \`Cargo.toml\`:

\`\`\`toml
[dependencies]
rand = "0.8.0"
\`\`\`

To get started using Rand, see [The Book](https://rust-random.github.io/book).


## Versions

Rand is *mature* (suitable for general usage, with infrequent breaking releases
which minimise breakage) but not yet at 1.0. We maintain compatibility with
pinned versions of the Rust compiler (see below).

Current Rand versions are:

-   Version 0.7 was released in June 2019, moving most non-uniform distributions
    to an external crate, moving \`from_entropy\` to \`SeedableRng\`, and many small
    changes and fixes.
-   Version 0.8 was released in December 2020 with many small changes.

A detailed [changelog](CHANGELOG.md) is available for releases.

When upgrading to the next minor series (especially 0.4  0.5), we recommend
reading the [Upgrade Guide](https://rust-random.github.io/book/update.html).

Rand has not yet reached 1.0 implying some breaking changes may arrive in the
future ([SemVer](https://semver.org/) allows each 0.x.0 release to include
breaking changes), but is considered *mature*: breaking changes are minimised
and breaking releases are infrequent.

Rand libs have inter-dependencies and make use of the
[semver trick](https://github.com/dtolnay/semver-trick/) in order to make traits
compatible across crate versions. (This is especially important for \`RngCore\`
and \`SeedableRng\`.) A few crate releases are thus compatibility shims,
depending on the *next* lib version (e.g. \`rand_core\` versions \`0.2.2\` and
\`0.3.1\`). This means, for example, that \`rand_core_0_4_0::SeedableRng\` and
\`rand_core_0_3_0::SeedableRng\` are distinct, incompatible traits, which can
cause build errors. Usually, running \`cargo update\` is enough to fix any issues.

### Yanked versions

Some versions of Rand crates have been yanked ("unreleased"). Where this occurs,
the crate's CHANGELOG *should* be updated with a rationale, and a search on the
issue tracker with the keyword \`yank\` *should* uncover the motivation.

### Rust version requirements

Since version 0.8, Rand requires **Rustc version 1.36 or greater**.
Rand 0.7 requires Rustc 1.32 or greater while versions 0.5 require Rustc 1.22 or
greater, and 0.4 and 0.3 (since approx. June 2017) require Rustc version 1.15 or
greater. Subsets of the Rand code may work with older Rust versions, but this is
not supported.

Continuous Integration (CI) will always test the minimum supported Rustc version
(the MSRV). The current policy is that this can be updated in any
Rand release if required, but the change must be noted in the changelog.

## Crate Features

Rand is built with these features enabled by default:

-   \`std\` enables functionality dependent on the \`std\` lib
-   \`alloc\` (implied by \`std\`) enables functionality requiring an allocator
-   \`getrandom\` (implied by \`std\`) is an optional dependency providing the code
    behind \`rngs::OsRng\`
-   \`std_rng\` enables inclusion of \`StdRng\`, \`thread_rng\` and \`random\`
    (the latter two *also* require that \`std\` be enabled)

Optionally, the following dependencies can be enabled:

-   \`log\` enables logging via the \`log\` crate\` crate

Additionally, these features configure Rand:

-   \`small_rng\` enables inclusion of the \`SmallRng\` PRNG
-   \`nightly\` enables some optimizations requiring nightly Rust
-   \`simd_support\` (experimental) enables sampling of SIMD values
    (uniformly random SIMD integers and floats), requiring nightly Rust
-   \`min_const_gen\` enables generating random arrays of 
    any size using min-const-generics, requiring Rust  1.51.

Note that nightly features are not stable and therefore not all library and
compiler versions will be compatible. This is especially true of Rand's
experimental \`simd_support\` feature.

Rand supports limited functionality in \`no_std\` mode (enabled via
\`default-features = false\`). In this case, \`OsRng\` and \`from_entropy\` are
unavailable (unless \`getrandom\` is enabled), large parts of \`seq\` are
unavailable (unless \`alloc\` is enabled), and \`thread_rng\` and \`random\` are
unavailable.

### WASM support

The WASM target \`wasm32-unknown-unknown\` is not *automatically* supported by
\`rand\` or \`getrandom\`. To solve this, either use a different target such as
\`wasm32-wasi\` or add a direct dependency on \`getrandom\` with the \`js\` feature
(if the target supports JavaScript). See
[getrandom#WebAssembly support](https://docs.rs/getrandom/latest/getrandom/#webassembly-support).

# License

Rand is distributed under the terms of both the MIT license and the
Apache License (Version 2.0).

See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT), and
[COPYRIGHT](COPYRIGHT) for details.`;

    return (
        <div className="text-white">
            <Nav />

            <div className="container mt-4 pb-4">
                <div className="row align-items-stretch">
                    <div className="col-md-6">
                        <div className="card border-0 shadow-sm text-black h-100">
                            <div className="card-body">
                                <div className="d-flex flex-row align-items-center">
                                    <div className="text-white circle bg-primary bg-gradient d-inline rounded-circle d-inline-flex justify-content-center align-items-center"
                                        style={{ width: '2rem', height: '2rem' }}>
                                        <Box />
                                    </div>
                                    <h1 className="text-primary d-inline px-2">{crate}</h1>
                                    <h2 className="text-secondary m-0">{crateVersion.vers}</h2>
                                </div>

                                <p className="m-0">Random number generators and other randomness functionality.</p>
                            </div>
                        </div>
                    </div>

                    <div className="col-md-6">
                        <div className="card border-0 shadow-sm text-black h-100">
                            <div className="card-body">
                                test
                            </div>
                        </div>
                    </div>
                </div>

                <div className="row my-4">
                    <div className="col-md-9">
                        <div className="card border-0 shadow-sm text-black">
                            <div className="card-header">
                                <ul className="nav nav-pills card-header-pills">
                                    <li className="nav-item">
                                        <a className="nav-link active bg-primary bg-gradient" href="#">Readme</a>
                                    </li>
                                    <li className="nav-item">
                                        <a className="nav-link" href="#">
                                            Versions
                                            <span className="badge rounded-pill bg-danger ms-1">{crateInfo.versions.length}</span>
                                        </a>
                                    </li>
                                </ul>
                            </div>

                            <div className="card-body">
                                <ReactMarkdown children={readme} remarkPlugins={[remarkGfm]} components={{
                                    code({node, inline, className, children, ...props}) {
                                        const match = /language-(\w+)/.exec(className || '')
                                        return !inline && match ? (
                                        <Prism
                                            children={String(children).replace(/\n$/, '')}
                                            language={match[1]}
                                            PreTag="div"
                                            {...props}
                                        />
                                        ) : (
                                        <code className={className} {...props}>
                                            {children}
                                        </code>
                                        )
                                    }
                                }} />
                            </div>
                        </div>
                    </div>

                    <div className="col-md-3">
                        <div className="card border-0 shadow-sm text-black">
                            <div className="card-body pb-0">
                                <h5 className="card-title">Dependencies</h5>
                            </div>

                            <ul className="list-group list-group-flush mb-2">
                                {crateVersion.deps.map(dep => (
                                    <li key={dep} className="list-group-item">{dep.name} = "<strong>{dep.version_req}</strong>"</li>
                                ))}
                            </ul>
                        </div>

                        <div className="card border-0 shadow-sm text-black mt-4">
                            <div className="card-body pb-0">
                                <h5 className="card-title">Dependents</h5>
                            </div>

                            <ul className="list-group list-group-flush">
                                <li className="list-group-item">An item</li>
                                <li className="list-group-item">A second item</li>
                                <li className="list-group-item">A third item</li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}
diff --git a/chartered-frontend/src/sections/Nav.tsx b/chartered-frontend/src/sections/Nav.tsx
new file mode 100644
index 0000000..8002bc4 100644
--- /dev/null
+++ a/chartered-frontend/src/sections/Nav.tsx
@@ -1,0 +1,60 @@
import React = require("react");
import { NavLink, Link } from "react-router-dom";

import { BoxArrowRight } from 'react-bootstrap-icons';
import { useAuth } from "../useAuth";

export default function Nav() {
    const auth = useAuth();

    const logout = async (e) => {
        e.preventDefault();
        await auth.logout();
    };

    return (
        <nav className="navbar navbar-expand-lg navbar-light bg-white shadow-sm">
            <div className="container-fluid">
                <Link className="navbar-brand" to="/dashboard">✈️ chartered</Link>
                <button className="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                    <span className="navbar-toggler-icon"></span>
                </button>

                <div className="collapse navbar-collapse" id="navbarSupportedContent">
                    <ul className="navbar-nav me-auto mb-2 mb-lg-0">
                        <li className="nav-item">
                            <NavLink to="/dashboard" className="nav-link">Home</NavLink>
                        </li>
                        <li className="nav-item">
                            <a className="nav-link" href="#">Link</a>
                        </li>
                        <li className="nav-item dropdown">
                            <a className="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                                Dropdown
                            </a>

                            <ul className="dropdown-menu" aria-labelledby="navbarDropdown">
                                <li><a className="dropdown-item" href="#">Action</a></li>
                                <li><a className="dropdown-item" href="#">Another action</a></li>
                                <li><hr className="dropdown-divider" /></li>
                                <li><a className="dropdown-item" href="#">Something else here</a></li>
                            </ul>
                        </li>

                        <li className="nav-item">
                            <a className="nav-link disabled" href="#" tabIndex={-1} aria-disabled="true">Disabled</a>
                        </li>
                    </ul>

                    <form className="d-flex">
                        <input className="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
                    </form>

                    <div>
                        <a href="#" onClick={logout} className="nav-link text-danger">Logout <BoxArrowRight /></a>
                    </div>
                </div>
            </div>
        </nav>
    );
}
diff --git a/chartered-web/src/endpoints/login.rs b/chartered-web/src/endpoints/login.rs
deleted file mode 100644
index 5ca0bab..0000000 100644
--- a/chartered-web/src/endpoints/login.rs
+++ /dev/null
@@ -1,59 +1,0 @@
use axum::{extract, Json};
use chartered_db::{
    users::{User, UserApiKey},
    ConnectionPool,
};
use serde::{Deserialize, Serialize};
use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("Failed to query database")]
    Database(#[from] chartered_db::Error),
    #[error("Invalid username/password")]
    UnknownUser,
}

impl Error {
    pub fn status_code(&self) -> axum::http::StatusCode {
        use axum::http::StatusCode;

        match self {
            Self::Database(_) => StatusCode::INTERNAL_SERVER_ERROR,
            Self::UnknownUser => StatusCode::FORBIDDEN,
        }
    }
}

define_error_response!(Error);

pub async fn handle(
    extract::Extension(db): extract::Extension<ConnectionPool>,
    extract::Json(req): extract::Json<Request>,
) -> Result<Json<Response>, Error> {
    // TODO: passwords
    let user = User::find_by_username(db.clone(), req.username)
        .await?
        .ok_or(Error::UnknownUser)?;

    // todo: session? ip storage? etc...
    let expires = chrono::Utc::now() + chrono::Duration::hours(1);
    let key = UserApiKey::generate(db, user.id, None, Some(expires.naive_utc())).await?;

    Ok(Json(Response {
        key: key.api_key,
        expires,
    }))
}

#[derive(Deserialize)]
pub struct Request {
    username: String,
    password: String,
}

#[derive(Serialize)]
pub struct Response {
    key: String,
    expires: chrono::DateTime<chrono::Utc>,
}
diff --git a/chartered-web/src/endpoints/mod.rs b/chartered-web/src/endpoints/mod.rs
index 7aa2caa..e8b3b14 100644
--- a/chartered-web/src/endpoints/mod.rs
+++ a/chartered-web/src/endpoints/mod.rs
@@ -1,3 +1,15 @@
macro_rules! ensure_has_crate_perm {
    ($db:expr, $user:expr, $crate_expr:expr, $($permission:path | -> $error:expr$(,)?),*) => {{
        let perms = $user.get_crate_permissions($db.clone(), $crate_expr.id).await?;

        $(
            if !perms.contains($permission) {
                return Err($error);
            }
        )*
    }};
}

#[derive(serde::Serialize)]
pub struct ErrorResponse {
    error: String,
@@ -32,4 +44,4 @@
}

pub mod cargo_api;
pub mod login;
pub mod web_api;
diff --git a/chartered-web/src/endpoints/cargo_api/mod.rs b/chartered-web/src/endpoints/cargo_api/mod.rs
index 425ae74..9ea8e43 100644
--- a/chartered-web/src/endpoints/cargo_api/mod.rs
+++ a/chartered-web/src/endpoints/cargo_api/mod.rs
@@ -1,15 +1,3 @@
macro_rules! ensure_has_crate_perm {
    ($db:expr, $user:expr, $crate_expr:expr, $($permission:path | -> $error:expr$(,)?),*) => {{
        let perms = $user.get_crate_permissions($db.clone(), $crate_expr.id).await?;

        $(
            if !perms.contains($permission) {
                return Err($error);
            }
        )*
    }};
}

mod download;
mod owners;
mod publish;
diff --git a/chartered-web/src/endpoints/cargo_api/publish.rs b/chartered-web/src/endpoints/cargo_api/publish.rs
index 1e99537..4b274d7 100644
--- a/chartered-web/src/endpoints/cargo_api/publish.rs
+++ a/chartered-web/src/endpoints/cargo_api/publish.rs
@@ -8,7 +8,7 @@
use chartered_fs::FileSystem;
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
use std::{convert::TryInto, sync::Arc};
use std::{borrow::Cow, convert::TryInto, sync::Arc};
use thiserror::Error;

#[derive(Error, Debug)]
@@ -103,17 +103,28 @@

#[derive(Deserialize, Debug)]
pub struct Metadata<'a> {
    authors: Vec<&'a str>,
    description: Option<&'a str>,
    documentation: Option<&'a str>,
    homepage: Option<&'a str>,
    readme: Option<&'a str>,
    readme_file: Option<&'a str>,
    keywords: Vec<&'a str>,
    categories: Vec<&'a str>,
    license: Option<&'a str>,
    license_file: Option<&'a str>,
    repository: Option<&'a str>,
    #[serde(borrow)]
    authors: Vec<Cow<'a, str>>,
    #[serde(borrow)]
    description: Option<Cow<'a, str>>,
    #[serde(borrow)]
    documentation: Option<Cow<'a, str>>,
    #[serde(borrow)]
    homepage: Option<Cow<'a, str>>,
    #[serde(borrow)]
    readme: Option<Cow<'a, str>>,
    #[serde(borrow)]
    readme_file: Option<Cow<'a, str>>,
    #[serde(borrow)]
    keywords: Vec<Cow<'a, str>>,
    #[serde(borrow)]
    categories: Vec<Cow<'a, str>>,
    #[serde(borrow)]
    license: Option<Cow<'a, str>>,
    #[serde(borrow)]
    license_file: Option<Cow<'a, str>>,
    #[serde(borrow)]
    repository: Option<Cow<'a, str>>,
    #[serde(flatten)]
    inner: chartered_types::cargo::CrateVersion<'a>,
}
diff --git a/chartered-web/src/endpoints/web_api/crate_info.rs b/chartered-web/src/endpoints/web_api/crate_info.rs
new file mode 100644
index 0000000..5242483 100644
--- /dev/null
+++ a/chartered-web/src/endpoints/web_api/crate_info.rs
@@ -1,0 +1,59 @@
use axum::{extract, Json};
use chartered_db::{
    crates::Crate,
    users::{User, UserCratePermissionValue as Permission},
    ConnectionPool,
};
use chartered_types::cargo::CrateVersion;
use serde::Serialize;
use std::sync::Arc;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("Failed to query database")]
    Database(#[from] chartered_db::Error),
    #[error("Failed to fetch crate file")]
    File(#[from] std::io::Error),
    #[error("The requested crate does not exist")]
    NoCrate,
}

impl Error {
    pub fn status_code(&self) -> axum::http::StatusCode {
        use axum::http::StatusCode;

        match self {
            Self::Database(_) | Self::File(_) => StatusCode::INTERNAL_SERVER_ERROR,
            Self::NoCrate => StatusCode::NOT_FOUND,
        }
    }
}

define_error_response!(Error);

pub async fn handle(
    extract::Path((_api_key, name)): extract::Path<(String, String)>,
    extract::Extension(db): extract::Extension<ConnectionPool>,
    extract::Extension(user): extract::Extension<Arc<User>>,
) -> Result<Json<Response>, Error> {
    let crate_ = Crate::find_by_name(db.clone(), name)
        .await?
        .ok_or(Error::NoCrate)
        .map(std::sync::Arc::new)?;
    ensure_has_crate_perm!(db, user, crate_, Permission::VISIBLE | -> Error::NoCrate);

    let versions = crate_.clone().versions(db).await?;

    Ok(Json(Response {
        versions: versions
            .into_iter()
            .map(|v| v.into_cargo_format(&crate_).into_owned())
            .collect(),
    }))
}

#[derive(Serialize)]
pub struct Response {
    versions: Vec<CrateVersion<'static>>,
}
diff --git a/chartered-web/src/endpoints/web_api/login.rs b/chartered-web/src/endpoints/web_api/login.rs
new file mode 100644
index 0000000..5ca0bab 100644
--- /dev/null
+++ a/chartered-web/src/endpoints/web_api/login.rs
@@ -1,0 +1,59 @@
use axum::{extract, Json};
use chartered_db::{
    users::{User, UserApiKey},
    ConnectionPool,
};
use serde::{Deserialize, Serialize};
use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("Failed to query database")]
    Database(#[from] chartered_db::Error),
    #[error("Invalid username/password")]
    UnknownUser,
}

impl Error {
    pub fn status_code(&self) -> axum::http::StatusCode {
        use axum::http::StatusCode;

        match self {
            Self::Database(_) => StatusCode::INTERNAL_SERVER_ERROR,
            Self::UnknownUser => StatusCode::FORBIDDEN,
        }
    }
}

define_error_response!(Error);

pub async fn handle(
    extract::Extension(db): extract::Extension<ConnectionPool>,
    extract::Json(req): extract::Json<Request>,
) -> Result<Json<Response>, Error> {
    // TODO: passwords
    let user = User::find_by_username(db.clone(), req.username)
        .await?
        .ok_or(Error::UnknownUser)?;

    // todo: session? ip storage? etc...
    let expires = chrono::Utc::now() + chrono::Duration::hours(1);
    let key = UserApiKey::generate(db, user.id, None, Some(expires.naive_utc())).await?;

    Ok(Json(Response {
        key: key.api_key,
        expires,
    }))
}

#[derive(Deserialize)]
pub struct Request {
    username: String,
    password: String,
}

#[derive(Serialize)]
pub struct Response {
    key: String,
    expires: chrono::DateTime<chrono::Utc>,
}
diff --git a/chartered-web/src/endpoints/web_api/mod.rs b/chartered-web/src/endpoints/web_api/mod.rs
new file mode 100644
index 0000000..844b0e4 100644
--- /dev/null
+++ a/chartered-web/src/endpoints/web_api/mod.rs
@@ -1,0 +1,5 @@
mod crate_info;
mod login;

pub use crate_info::handle as crate_info;
pub use login::handle as login;