From ff12615eae0b4f6c73787241134576bb0176bab4 Mon Sep 17 00:00:00 2001
From: "DESKTOP-J7QTMBR\\mikke" <mikkel.marsteinvikenfiber.no>
Date: Tue, 15 Feb 2022 17:41:49 +0100
Subject: [PATCH 1/6] #5 added login API request

---
 frontend/Constants.ts             |    2 +
 frontend/components/LoginForm.tsx |    5 +-
 frontend/package-lock.json        | 3656 +----------------------------
 frontend/package.json             |    1 +
 frontend/utils/APIUtils.ts        |   42 +
 5 files changed, 67 insertions(+), 3639 deletions(-)
 create mode 100644 frontend/Constants.ts
 create mode 100644 frontend/utils/APIUtils.ts

diff --git a/frontend/Constants.ts b/frontend/Constants.ts
new file mode 100644
index 0000000..0794342
--- /dev/null
+++ b/frontend/Constants.ts
@@ -0,0 +1,2 @@
+export const PORT: number = 8000;
+export const URL: string = "http://localhost";
\ No newline at end of file
diff --git a/frontend/components/LoginForm.tsx b/frontend/components/LoginForm.tsx
index 9668f3f..f8bb0be 100644
--- a/frontend/components/LoginForm.tsx
+++ b/frontend/components/LoginForm.tsx
@@ -2,6 +2,7 @@ import React from 'react'
 import { Formik, Field, Form } from 'formik'
 import { TextField } from '@navikt/ds-react';
 import formStyles from '../styles/LoginForm.module.css'
+import { loginRequest } from '../utils/APIUtils';
 
 export default function LoginForm() {
   return (
@@ -12,8 +13,8 @@ export default function LoginForm() {
             }}
 
             onSubmit={async (values) => {
-                await new Promise((resolve) => setTimeout(resolve, 500));
-                alert(JSON.stringify(values, null, 2));
+                await loginRequest(JSON.stringify(values, null, 2))
+                    .then((response) => alert(response.successful))
             }}
         >
             
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 6ac4a3c..7c5fa5a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,3633 +1,7 @@
 {
   "name": "trdk03",
-  "lockfileVersion": 2,
   "requires": true,
-  "packages": {
-    "": {
-      "name": "trdk03",
-      "dependencies": {
-        "@navikt/ds-css": "^0.15.3",
-        "@navikt/ds-react": "^0.16.6",
-        "formik": "^2.2.9",
-        "next": "12.0.10",
-        "react": "17.0.2",
-        "react-dom": "17.0.2",
-        "recharts": "^2.1.9"
-      },
-      "devDependencies": {
-        "@types/node": "17.0.17",
-        "@types/react": "17.0.39",
-        "eslint": "8.9.0",
-        "eslint-config-next": "12.0.10",
-        "typescript": "4.5.5"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.17.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz",
-      "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==",
-      "dependencies": {
-        "regenerator-runtime": "^0.13.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/runtime-corejs3": {
-      "version": "7.17.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz",
-      "integrity": "sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==",
-      "dev": true,
-      "dependencies": {
-        "core-js-pure": "^3.20.2",
-        "regenerator-runtime": "^0.13.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@emotion/hash": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
-      "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz",
-      "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.3.1",
-        "globals": "^13.9.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.0.4",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz",
-      "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==",
-      "dev": true,
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^1.2.1",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=10.10.0"
-      }
-    },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-      "dev": true
-    },
-    "node_modules/@material-ui/core": {
-      "version": "4.12.3",
-      "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.3.tgz",
-      "integrity": "sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==",
-      "deprecated": "You can now upgrade to @mui/material. See the guide: https://mui.com/guides/migration-v4/",
-      "dependencies": {
-        "@babel/runtime": "^7.4.4",
-        "@material-ui/styles": "^4.11.4",
-        "@material-ui/system": "^4.12.1",
-        "@material-ui/types": "5.1.0",
-        "@material-ui/utils": "^4.11.2",
-        "@types/react-transition-group": "^4.2.0",
-        "clsx": "^1.0.4",
-        "hoist-non-react-statics": "^3.3.2",
-        "popper.js": "1.16.1-lts",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.8.0 || ^17.0.0",
-        "react-transition-group": "^4.4.0"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/material-ui"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^16.8.0 || ^17.0.0",
-        "react-dom": "^16.8.0 || ^17.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@material-ui/styles": {
-      "version": "4.11.4",
-      "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz",
-      "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==",
-      "dependencies": {
-        "@babel/runtime": "^7.4.4",
-        "@emotion/hash": "^0.8.0",
-        "@material-ui/types": "5.1.0",
-        "@material-ui/utils": "^4.11.2",
-        "clsx": "^1.0.4",
-        "csstype": "^2.5.2",
-        "hoist-non-react-statics": "^3.3.2",
-        "jss": "^10.5.1",
-        "jss-plugin-camel-case": "^10.5.1",
-        "jss-plugin-default-unit": "^10.5.1",
-        "jss-plugin-global": "^10.5.1",
-        "jss-plugin-nested": "^10.5.1",
-        "jss-plugin-props-sort": "^10.5.1",
-        "jss-plugin-rule-value-function": "^10.5.1",
-        "jss-plugin-vendor-prefixer": "^10.5.1",
-        "prop-types": "^15.7.2"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/material-ui"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^16.8.0 || ^17.0.0",
-        "react-dom": "^16.8.0 || ^17.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@material-ui/styles/node_modules/csstype": {
-      "version": "2.6.19",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
-      "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ=="
-    },
-    "node_modules/@material-ui/system": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.1.tgz",
-      "integrity": "sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==",
-      "dependencies": {
-        "@babel/runtime": "^7.4.4",
-        "@material-ui/utils": "^4.11.2",
-        "csstype": "^2.5.2",
-        "prop-types": "^15.7.2"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/material-ui"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^16.8.0 || ^17.0.0",
-        "react-dom": "^16.8.0 || ^17.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@material-ui/system/node_modules/csstype": {
-      "version": "2.6.19",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
-      "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ=="
-    },
-    "node_modules/@material-ui/types": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
-      "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
-      "peerDependencies": {
-        "@types/react": "*"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@material-ui/utils": {
-      "version": "4.11.2",
-      "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz",
-      "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==",
-      "dependencies": {
-        "@babel/runtime": "^7.4.4",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.8.0 || ^17.0.0"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "peerDependencies": {
-        "react": "^16.8.0 || ^17.0.0",
-        "react-dom": "^16.8.0 || ^17.0.0"
-      }
-    },
-    "node_modules/@navikt/ds-css": {
-      "version": "0.15.3",
-      "resolved": "https://registry.npmjs.org/@navikt/ds-css/-/ds-css-0.15.3.tgz",
-      "integrity": "sha512-/BFw77BnbjEl3yL45hO5H0Z8bgDLMnY5ty//aGpk+Jy//1Gm5WlF7JvWSlIu1/hDj6eeT4zwRdXJVO6pFkHCFA=="
-    },
-    "node_modules/@navikt/ds-icons": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/@navikt/ds-icons/-/ds-icons-0.8.4.tgz",
-      "integrity": "sha512-yIBYeJrkO3pEL2qcR5DGtQQ6mfs9Bb8iueMdmj1sa0JBPuDmPLLW5SJ/2HH4tcQciDZ3erp7k4CemJkbtob5AQ==",
-      "dependencies": {
-        "uuid": "^8.3.2"
-      },
-      "peerDependencies": {
-        "@types/react": "^17.0.30",
-        "react": "^17.0.0"
-      }
-    },
-    "node_modules/@navikt/ds-react": {
-      "version": "0.16.6",
-      "resolved": "https://registry.npmjs.org/@navikt/ds-react/-/ds-react-0.16.6.tgz",
-      "integrity": "sha512-fsFK/tpctf4KRY+lf6Y3kuwPhK5B8SwJRhr5q9Vrjfrair08gTOBO5T6cu59OKfZ4361gPgdghST81ancpL0nA==",
-      "dependencies": {
-        "@material-ui/core": "^4.12.3",
-        "@navikt/ds-icons": "^0.8.4",
-        "@popperjs/core": "^2.10.1",
-        "classnames": "^2.2.6",
-        "react-collapse": "^5.1.0",
-        "react-merge-refs": "^1.1.0",
-        "react-modal": "3.14.3",
-        "react-popper": "^2.2.5",
-        "uuid": "^8.3.2"
-      },
-      "peerDependencies": {
-        "@types/react": "^17.0.30",
-        "react": "^17.0.0"
-      }
-    },
-    "node_modules/@next/env": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.10.tgz",
-      "integrity": "sha512-mQVj0K6wQ5WEk/sL9SZ+mJXJUaG7el8CpZ6io1uFe9GgNTSC7EgUyNGqM6IQovIFc5ukF4O/hqsdh3S/DCgT2g=="
-    },
-    "node_modules/@next/eslint-plugin-next": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.10.tgz",
-      "integrity": "sha512-PbGRnV5HGSfRGLjf8uTh1MaWgLwnjKjWiGVjK752ifITJbZ28/5AmLAFT2shDYeux8BHgpgVll5QXu7GN3YLFw==",
-      "dev": true,
-      "dependencies": {
-        "glob": "7.1.7"
-      }
-    },
-    "node_modules/@next/eslint-plugin-next/node_modules/glob": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@next/swc-android-arm64": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.10.tgz",
-      "integrity": "sha512-xYwXGkNhzZZsM5MD7KRwF5ZNiC8OLPtVMUiagpPnwENg8Hb0GSQo/NbYWXM8YrawEwp9LaZ7OXiuRKPh2JyBdA==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-arm64": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.10.tgz",
-      "integrity": "sha512-f2zngulkpIJKWHckhRi7X8GZ+J/tNgFF7lYIh7Qx15JH0OTBsjkqxORlkzy+VZyHJ5sWTCaI6HYYd3ow6qkEEg==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-x64": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.10.tgz",
-      "integrity": "sha512-Qykcu/gVC5oTvOQoRBhyuS5GYm5SbcgrFTsaLFkGBmEkg9eMQRiaCswk4IafpDXVzITkVFurzSM28q3tLW2qUw==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm-gnueabihf": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.10.tgz",
-      "integrity": "sha512-EhqrTFsIXAXN9B/fiiW/QKUK/lSLCXRsLalkUp58KDfMqVLLlj1ORbESAcswiNQOChLuHQSldGEEtOBPQZcd9A==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-gnu": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.10.tgz",
-      "integrity": "sha512-kqGtC72g3+JYXZbY2ca6digXR5U6AQ6Dzv4eAxYluMePLHjI/Xye1mf9dwVsgmeXfrD/IRDp5K/3A6UNvBm4oQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-musl": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.10.tgz",
-      "integrity": "sha512-bG9zTSNwnSgc1Un/7oz1ZVN4UeXsTWrsQhAGWU78lLLCn4Zj9HQoUCRCGLt0OVs2DBZ+WC8CzzFliQ1SKipVbg==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-gnu": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.10.tgz",
-      "integrity": "sha512-c79PcfWtyThiYRa1+3KVfDq0zXaI8o1d6dQWNVqDrtLz5HKM/rbjLdvoNuxDwUeZhxI/d9CtyH6GbuKPw5l/5A==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-musl": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.10.tgz",
-      "integrity": "sha512-g/scgn+21/MLfizOCZOZt+MxNj2/8Tdlwjvy+QZcSUPZRUI2Y5o3HwBvI1f/bSci+NGRU+bUAO0NFtRJ9MzH5w==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-arm64-msvc": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.10.tgz",
-      "integrity": "sha512-gl6B/ravwMeY5Nv4Il2/ARYJQ6u+KPRwGMjS1ZrNudIKlNn4YBeXh5A4cIVm+dHaff6/O/lGOa5/SUYDMZpkww==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-ia32-msvc": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.10.tgz",
-      "integrity": "sha512-7RVpZ3tSThC6j+iZB0CUYmFiA3kXmN+pE7QcfyAxFaflKlaZoWNMKHIEZDuxSJc6YmQ6kyxsjqxVay2F5+/YCg==",
-      "cpu": [
-        "ia32"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-x64-msvc": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.10.tgz",
-      "integrity": "sha512-oUIWRKd24jFLRWUYO1CZmML5+32BcpVfqhimGaaZIXcOkfQW+iqiAzdqsv688zaGtyKGeB9ZtiK3NDf+Q0v+Vw==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@popperjs/core": {
-      "version": "2.11.2",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz",
-      "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/popperjs"
-      }
-    },
-    "node_modules/@rushstack/eslint-patch": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz",
-      "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==",
-      "dev": true
-    },
-    "node_modules/@types/d3-color": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz",
-      "integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w=="
-    },
-    "node_modules/@types/d3-interpolate": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-2.0.2.tgz",
-      "integrity": "sha512-lElyqlUfIPyWG/cD475vl6msPL4aMU7eJvx1//Q177L8mdXoVPFl1djIESF2FKnc0NyaHvQlJpWwKJYwAhUoCw==",
-      "dependencies": {
-        "@types/d3-color": "^2"
-      }
-    },
-    "node_modules/@types/d3-path": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-2.0.1.tgz",
-      "integrity": "sha512-6K8LaFlztlhZO7mwsZg7ClRsdLg3FJRzIIi6SZXDWmmSJc2x8dd2VkESbLXdk3p8cuvz71f36S0y8Zv2AxqvQw=="
-    },
-    "node_modules/@types/d3-scale": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-3.3.2.tgz",
-      "integrity": "sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ==",
-      "dependencies": {
-        "@types/d3-time": "^2"
-      }
-    },
-    "node_modules/@types/d3-shape": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-2.1.3.tgz",
-      "integrity": "sha512-HAhCel3wP93kh4/rq+7atLdybcESZ5bRHDEZUojClyZWsRuEMo3A52NGYJSh48SxfxEU6RZIVbZL2YFZ2OAlzQ==",
-      "dependencies": {
-        "@types/d3-path": "^2"
-      }
-    },
-    "node_modules/@types/d3-time": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.1.tgz",
-      "integrity": "sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg=="
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
-      "dev": true
-    },
-    "node_modules/@types/node": {
-      "version": "17.0.17",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz",
-      "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==",
-      "dev": true
-    },
-    "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=="
-    },
-    "node_modules/@types/react": {
-      "version": "17.0.39",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz",
-      "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==",
-      "dependencies": {
-        "@types/prop-types": "*",
-        "@types/scheduler": "*",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/@types/react-transition-group": {
-      "version": "4.4.4",
-      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz",
-      "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==",
-      "dependencies": {
-        "@types/react": "*"
-      }
-    },
-    "node_modules/@types/resize-observer-browser": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz",
-      "integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg=="
-    },
-    "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=="
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz",
-      "integrity": "sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "5.11.0",
-        "@typescript-eslint/types": "5.11.0",
-        "@typescript-eslint/typescript-estree": "5.11.0",
-        "debug": "^4.3.2"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz",
-      "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.11.0",
-        "@typescript-eslint/visitor-keys": "5.11.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz",
-      "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz",
-      "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.11.0",
-        "@typescript-eslint/visitor-keys": "5.11.0",
-        "debug": "^4.3.2",
-        "globby": "^11.0.4",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.11.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz",
-      "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.11.0",
-        "eslint-visitor-keys": "^3.0.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.7.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
-      "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
-    },
-    "node_modules/aria-query": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
-      "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime": "^7.10.2",
-        "@babel/runtime-corejs3": "^7.10.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      }
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
-      "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1",
-        "get-intrinsic": "^1.1.1",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
-      "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz",
-      "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/ast-types-flow": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
-      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
-      "dev": true
-    },
-    "node_modules/axe-core": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
-      "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/axobject-query": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
-      "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
-      "dev": true
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001312",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz",
-      "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/browserslist"
-      }
-    },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/classnames": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
-      "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
-    },
-    "node_modules/clsx": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
-      "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "node_modules/core-js-pure": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.0.tgz",
-      "integrity": "sha512-VaJUunCZLnxuDbo1rNOzwbet9E1K9joiXS5+DQMPtgxd24wfsZbJZMMfQLGYMlCUvSxLfsRUUhoOR2x28mFfeg==",
-      "dev": true,
-      "hasInstallScript": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/core-js"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/css-unit-converter": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
-      "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
-    },
-    "node_modules/css-vendor": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
-      "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
-      "dependencies": {
-        "@babel/runtime": "^7.8.3",
-        "is-in-browser": "^1.0.2"
-      }
-    },
-    "node_modules/csstype": {
-      "version": "3.0.10",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz",
-      "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA=="
-    },
-    "node_modules/d3-array": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-      "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
-      "dependencies": {
-        "internmap": "^1.0.0"
-      }
-    },
-    "node_modules/d3-color": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz",
-      "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ=="
-    },
-    "node_modules/d3-format": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz",
-      "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA=="
-    },
-    "node_modules/d3-interpolate": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
-      "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
-      "dependencies": {
-        "d3-color": "1 - 2"
-      }
-    },
-    "node_modules/d3-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz",
-      "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA=="
-    },
-    "node_modules/d3-scale": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz",
-      "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==",
-      "dependencies": {
-        "d3-array": "^2.3.0",
-        "d3-format": "1 - 2",
-        "d3-interpolate": "1.2.0 - 2",
-        "d3-time": "^2.1.1",
-        "d3-time-format": "2 - 3"
-      }
-    },
-    "node_modules/d3-shape": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz",
-      "integrity": "sha512-PnjUqfM2PpskbSLTJvAzp2Wv4CZsnAgTfcVRTwW03QR3MkXF8Uo7B1y/lWkAsmbKwuecto++4NlsYcvYpXpTHA==",
-      "dependencies": {
-        "d3-path": "1 - 2"
-      }
-    },
-    "node_modules/d3-time": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz",
-      "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
-      "dependencies": {
-        "d3-array": "2"
-      }
-    },
-    "node_modules/d3-time-format": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz",
-      "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
-      "dependencies": {
-        "d3-time": "1 - 2"
-      }
-    },
-    "node_modules/damerau-levenshtein": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
-      "dev": true
-    },
-    "node_modules/debug": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/decimal.js-light": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
-      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
-    },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
-    },
-    "node_modules/deepmerge": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
-      "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
-      "dependencies": {
-        "object-keys": "^1.0.12"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/dom-helpers": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
-      "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
-      "dependencies": {
-        "@babel/runtime": "^7.8.7",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/es-abstract": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
-      "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.1.1",
-        "get-symbol-description": "^1.0.0",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.2",
-        "internal-slot": "^1.0.3",
-        "is-callable": "^1.2.4",
-        "is-negative-zero": "^2.0.1",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.1",
-        "is-string": "^1.0.7",
-        "is-weakref": "^1.0.1",
-        "object-inspect": "^1.11.0",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.2",
-        "string.prototype.trimend": "^1.0.4",
-        "string.prototype.trimstart": "^1.0.4",
-        "unbox-primitive": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "8.9.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz",
-      "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==",
-      "dev": true,
-      "dependencies": {
-        "@eslint/eslintrc": "^1.1.0",
-        "@humanwhocodes/config-array": "^0.9.2",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.3.1",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^6.0.1",
-        "globals": "^13.6.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.0.4",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "regexpp": "^3.2.0",
-        "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-config-next": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.0.10.tgz",
-      "integrity": "sha512-l1er6mwSo1bltjLwmd71p5BdT6k/NQxV1n4lKZI6xt3MDMrq7ChUBr+EecxOry8GC/rCRUtPpH8Ygs0BJc5YLg==",
-      "dev": true,
-      "dependencies": {
-        "@next/eslint-plugin-next": "12.0.10",
-        "@rushstack/eslint-patch": "^1.0.8",
-        "@typescript-eslint/parser": "^5.0.0",
-        "eslint-import-resolver-node": "^0.3.4",
-        "eslint-import-resolver-typescript": "^2.4.0",
-        "eslint-plugin-import": "^2.25.2",
-        "eslint-plugin-jsx-a11y": "^6.5.1",
-        "eslint-plugin-react": "^7.27.0",
-        "eslint-plugin-react-hooks": "^4.3.0"
-      },
-      "peerDependencies": {
-        "eslint": "^7.23.0 || ^8.0.0",
-        "next": ">=10.2.0",
-        "typescript": ">=3.3.1"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
-      "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "resolve": "^1.20.0"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-typescript": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz",
-      "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.3.1",
-        "glob": "^7.1.7",
-        "is-glob": "^4.0.1",
-        "resolve": "^1.20.0",
-        "tsconfig-paths": "^3.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "*",
-        "eslint-plugin-import": "*"
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
-      "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "find-up": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.25.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
-      "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flat": "^1.2.5",
-        "debug": "^2.6.9",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-module-utils": "^2.7.2",
-        "has": "^1.0.3",
-        "is-core-module": "^2.8.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.0.4",
-        "object.values": "^1.1.5",
-        "resolve": "^1.20.0",
-        "tsconfig-paths": "^3.12.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-import/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/eslint-plugin-jsx-a11y": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
-      "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime": "^7.16.3",
-        "aria-query": "^4.2.2",
-        "array-includes": "^3.1.4",
-        "ast-types-flow": "^0.0.7",
-        "axe-core": "^4.3.5",
-        "axobject-query": "^2.2.0",
-        "damerau-levenshtein": "^1.0.7",
-        "emoji-regex": "^9.2.2",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^3.2.1",
-        "language-tags": "^1.0.5",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react": {
-      "version": "7.28.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
-      "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flatmap": "^1.2.5",
-        "doctrine": "^2.1.0",
-        "estraverse": "^5.3.0",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.0.4",
-        "object.entries": "^1.1.5",
-        "object.fromentries": "^2.0.5",
-        "object.hasown": "^1.1.0",
-        "object.values": "^1.1.5",
-        "prop-types": "^15.7.2",
-        "resolve": "^2.0.0-next.3",
-        "semver": "^6.3.0",
-        "string.prototype.matchall": "^4.0.6"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react-hooks": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
-      "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/resolve": {
-      "version": "2.0.0-next.3",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
-      "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
-      }
-    },
-    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/espree": {
-      "version": "9.3.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
-      "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.7.0",
-        "acorn-jsx": "^5.3.1",
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
-    },
-    "node_modules/exenv": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
-      "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
-    },
-    "node_modules/fast-equals": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz",
-      "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w=="
-    },
-    "node_modules/fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "node_modules/fastq": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
-      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "dependencies": {
-        "flat-cache": "^3.0.4"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-      "dev": true,
-      "dependencies": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
-      "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
-      "dev": true
-    },
-    "node_modules/formik": {
-      "version": "2.2.9",
-      "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
-      "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://opencollective.com/formik"
-        }
-      ],
-      "dependencies": {
-        "deepmerge": "^2.1.1",
-        "hoist-non-react-statics": "^3.3.0",
-        "lodash": "^4.17.21",
-        "lodash-es": "^4.17.21",
-        "react-fast-compare": "^2.0.1",
-        "tiny-warning": "^1.0.2",
-        "tslib": "^1.10.0"
-      },
-      "peerDependencies": {
-        "react": ">=16.8.0"
-      }
-    },
-    "node_modules/formik/node_modules/react-fast-compare": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
-      "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "node_modules/functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/globals": {
-      "version": "13.12.1",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
-      "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/has-bigints": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
-      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
-      "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "dependencies": {
-        "react-is": "^16.7.0"
-      }
-    },
-    "node_modules/hyphenate-style-name": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
-      "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
-    },
-    "node_modules/ignore": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "node_modules/internal-slot": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
-      "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.0",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/internmap": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-      "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
-    },
-    "node_modules/is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-      "dev": true,
-      "dependencies": {
-        "has-bigints": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
-      "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
-      "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-in-browser": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
-      "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
-      "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
-      "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/jss": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz",
-      "integrity": "sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "csstype": "^3.0.2",
-        "is-in-browser": "^1.1.3",
-        "tiny-warning": "^1.0.2"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/jss"
-      }
-    },
-    "node_modules/jss-plugin-camel-case": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz",
-      "integrity": "sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "hyphenate-style-name": "^1.0.3",
-        "jss": "10.9.0"
-      }
-    },
-    "node_modules/jss-plugin-default-unit": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz",
-      "integrity": "sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "jss": "10.9.0"
-      }
-    },
-    "node_modules/jss-plugin-global": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz",
-      "integrity": "sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "jss": "10.9.0"
-      }
-    },
-    "node_modules/jss-plugin-nested": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz",
-      "integrity": "sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "jss": "10.9.0",
-        "tiny-warning": "^1.0.2"
-      }
-    },
-    "node_modules/jss-plugin-props-sort": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz",
-      "integrity": "sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "jss": "10.9.0"
-      }
-    },
-    "node_modules/jss-plugin-rule-value-function": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz",
-      "integrity": "sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "jss": "10.9.0",
-        "tiny-warning": "^1.0.2"
-      }
-    },
-    "node_modules/jss-plugin-vendor-prefixer": {
-      "version": "10.9.0",
-      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz",
-      "integrity": "sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "css-vendor": "^2.0.8",
-        "jss": "10.9.0"
-      }
-    },
-    "node_modules/jsx-ast-utils": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
-      "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.3",
-        "object.assign": "^4.1.2"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/language-subtag-registry": {
-      "version": "0.3.21",
-      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
-      "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
-      "dev": true
-    },
-    "node_modules/language-tags": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
-      "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
-      "dev": true,
-      "dependencies": {
-        "language-subtag-registry": "~0.3.2"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
-    },
-    "node_modules/lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
-      "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.1",
-        "picomatch": "^2.2.3"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz",
-      "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
-      "dev": true
-    },
-    "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/nanoid": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
-      "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
-      "dev": true
-    },
-    "node_modules/next": {
-      "version": "12.0.10",
-      "resolved": "https://registry.npmjs.org/next/-/next-12.0.10.tgz",
-      "integrity": "sha512-1y3PpGzpb/EZzz1jgne+JfZXKAVJUjYXwxzrADf/LWN+8yi9o79vMLXpW3mevvCHkEF2sBnIdjzNn16TJrINUw==",
-      "dependencies": {
-        "@next/env": "12.0.10",
-        "caniuse-lite": "^1.0.30001283",
-        "postcss": "8.4.5",
-        "styled-jsx": "5.0.0",
-        "use-subscription": "1.5.1"
-      },
-      "bin": {
-        "next": "dist/bin/next"
-      },
-      "engines": {
-        "node": ">=12.22.0"
-      },
-      "optionalDependencies": {
-        "@next/swc-android-arm64": "12.0.10",
-        "@next/swc-darwin-arm64": "12.0.10",
-        "@next/swc-darwin-x64": "12.0.10",
-        "@next/swc-linux-arm-gnueabihf": "12.0.10",
-        "@next/swc-linux-arm64-gnu": "12.0.10",
-        "@next/swc-linux-arm64-musl": "12.0.10",
-        "@next/swc-linux-x64-gnu": "12.0.10",
-        "@next/swc-linux-x64-musl": "12.0.10",
-        "@next/swc-win32-arm64-msvc": "12.0.10",
-        "@next/swc-win32-ia32-msvc": "12.0.10",
-        "@next/swc-win32-x64-msvc": "12.0.10"
-      },
-      "peerDependencies": {
-        "fibers": ">= 3.1.0",
-        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0",
-        "react": "^17.0.2 || ^18.0.0-0",
-        "react-dom": "^17.0.2 || ^18.0.0-0",
-        "sass": "^1.3.0"
-      },
-      "peerDependenciesMeta": {
-        "fibers": {
-          "optional": true
-        },
-        "node-sass": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.entries": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
-      "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.fromentries": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
-      "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.hasown": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz",
-      "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
-      "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-      "dev": true,
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-    },
-    "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/popper.js": {
-      "version": "1.16.1-lts",
-      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
-      "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
-    },
-    "node_modules/postcss": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
-      "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
-      "dependencies": {
-        "nanoid": "^3.1.30",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      }
-    },
-    "node_modules/postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "dependencies": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "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/raf": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
-      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
-      "dependencies": {
-        "performance-now": "^2.1.0"
-      }
-    },
-    "node_modules/react": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
-      "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/react-collapse": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/react-collapse/-/react-collapse-5.1.1.tgz",
-      "integrity": "sha512-k6cd7csF1o9LBhQ4AGBIdxB60SUEUMQDAnL2z1YvYNr9KoKr+nDkhN6FK7uGaBd/rYrYfrMpzpmJEIeHRYogBw==",
-      "peerDependencies": {
-        "react": ">=16.3.0"
-      }
-    },
-    "node_modules/react-dom": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
-      "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "scheduler": "^0.20.2"
-      },
-      "peerDependencies": {
-        "react": "17.0.2"
-      }
-    },
-    "node_modules/react-fast-compare": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
-      "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
-    },
-    "node_modules/react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-    },
-    "node_modules/react-lifecycles-compat": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
-      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
-    },
-    "node_modules/react-merge-refs": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz",
-      "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/gregberge"
-      }
-    },
-    "node_modules/react-modal": {
-      "version": "3.14.3",
-      "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.14.3.tgz",
-      "integrity": "sha512-+C2KODVKyu20zHXPJxfOOcf571L1u/EpFlH+oS/3YDn8rgVE51QZuxuuIwabJ8ZFnOEHaD+r6XNjqwtxZnXO0g==",
-      "dependencies": {
-        "exenv": "^1.2.0",
-        "prop-types": "^15.7.2",
-        "react-lifecycles-compat": "^3.0.0",
-        "warning": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "peerDependencies": {
-        "react": "^0.14.0 || ^15.0.0 || ^16 || ^17",
-        "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17"
-      }
-    },
-    "node_modules/react-popper": {
-      "version": "2.2.5",
-      "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
-      "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
-      "dependencies": {
-        "react-fast-compare": "^3.0.1",
-        "warning": "^4.0.2"
-      },
-      "peerDependencies": {
-        "@popperjs/core": "^2.0.0",
-        "react": "^16.8.0 || ^17"
-      }
-    },
-    "node_modules/react-resize-detector": {
-      "version": "6.7.8",
-      "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-6.7.8.tgz",
-      "integrity": "sha512-0FaEcUBAbn+pq3PT5a9hHRebUfuS1SRLGLpIw8LydU7zX429I6XJgKerKAMPsJH0qWAl6o5bVKNqFJqr6tGPYw==",
-      "dependencies": {
-        "@types/resize-observer-browser": "^0.1.6",
-        "lodash": "^4.17.21",
-        "resize-observer-polyfill": "^1.5.1"
-      },
-      "peerDependencies": {
-        "react": "^16.0.0 || ^17.0.0",
-        "react-dom": "^16.0.0 || ^17.0.0"
-      }
-    },
-    "node_modules/react-smooth": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.0.tgz",
-      "integrity": "sha512-wK4dBBR6P21otowgMT9toZk+GngMplGS1O5gk+2WSiHEXIrQgDvhR5IIlT74Vtu//qpTcipkgo21dD7a7AUNxw==",
-      "dependencies": {
-        "fast-equals": "^2.0.0",
-        "raf": "^3.4.0",
-        "react-transition-group": "2.9.0"
-      },
-      "peerDependencies": {
-        "prop-types": "^15.6.0",
-        "react": "^15.0.0 || ^16.0.0 || ^17.0.0",
-        "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0"
-      }
-    },
-    "node_modules/react-smooth/node_modules/dom-helpers": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
-      "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
-      "dependencies": {
-        "@babel/runtime": "^7.1.2"
-      }
-    },
-    "node_modules/react-smooth/node_modules/react-transition-group": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
-      "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
-      "dependencies": {
-        "dom-helpers": "^3.4.0",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2",
-        "react-lifecycles-compat": "^3.0.4"
-      },
-      "peerDependencies": {
-        "react": ">=15.0.0",
-        "react-dom": ">=15.0.0"
-      }
-    },
-    "node_modules/react-transition-group": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
-      "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
-      "dependencies": {
-        "@babel/runtime": "^7.5.5",
-        "dom-helpers": "^5.0.1",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2"
-      },
-      "peerDependencies": {
-        "react": ">=16.6.0",
-        "react-dom": ">=16.6.0"
-      }
-    },
-    "node_modules/recharts": {
-      "version": "2.1.9",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.1.9.tgz",
-      "integrity": "sha512-VozH5uznUvGqD7n224FGj7cmMAenlS0HPCs+7r2HeeHiQK6un6z0CTZfWVAB860xbcr4m+BN/EGMPZmYWd34Rg==",
-      "dependencies": {
-        "@types/d3-interpolate": "^2.0.0",
-        "@types/d3-scale": "^3.0.0",
-        "@types/d3-shape": "^2.0.0",
-        "classnames": "^2.2.5",
-        "d3-interpolate": "^2.0.0",
-        "d3-scale": "^3.0.0",
-        "d3-shape": "^2.0.0",
-        "eventemitter3": "^4.0.1",
-        "lodash": "^4.17.19",
-        "react-is": "^16.10.2",
-        "react-resize-detector": "^6.6.3",
-        "react-smooth": "^2.0.0",
-        "recharts-scale": "^0.4.4",
-        "reduce-css-calc": "^2.1.8"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "peerDependencies": {
-        "react": "^16.0.0 || ^17.0.0",
-        "react-dom": "^16.0.0 || ^17.0.0"
-      }
-    },
-    "node_modules/recharts-scale": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
-      "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
-      "dependencies": {
-        "decimal.js-light": "^2.4.1"
-      }
-    },
-    "node_modules/reduce-css-calc": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
-      "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
-      "dependencies": {
-        "css-unit-converter": "^1.1.1",
-        "postcss-value-parser": "^3.3.0"
-      }
-    },
-    "node_modules/regenerator-runtime": {
-      "version": "0.13.9",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-      "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz",
-      "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
-    },
-    "node_modules/resolve": {
-      "version": "1.22.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-      "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.8.1",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/scheduler": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
-      "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
-      }
-    },
-    "node_modules/semver": {
-      "version": "7.3.5",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-      "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/string.prototype.matchall": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
-      "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1",
-        "get-intrinsic": "^1.1.1",
-        "has-symbols": "^1.0.2",
-        "internal-slot": "^1.0.3",
-        "regexp.prototype.flags": "^1.3.1",
-        "side-channel": "^1.0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
-      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
-      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/styled-jsx": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz",
-      "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==",
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "peerDependencies": {
-        "react": ">= 16.8.0 || 17.x.x || 18.x.x"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        },
-        "babel-plugin-macros": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "dev": true
-    },
-    "node_modules/tiny-warning": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
-      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz",
-      "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
-      "dev": true,
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
-        "minimist": "^1.2.0",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-    },
-    "node_modules/tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.8.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      },
-      "peerDependencies": {
-        "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-      }
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "4.5.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
-      "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
-      "dev": true,
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=4.2.0"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
-      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has-bigints": "^1.0.1",
-        "has-symbols": "^1.0.2",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/use-subscription": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
-      "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
-      "dependencies": {
-        "object-assign": "^4.1.1"
-      },
-      "peerDependencies": {
-        "react": "^16.8.0 || ^17.0.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
-    "node_modules/warning": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
-      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
-      "dependencies": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    }
-  },
+  "lockfileVersion": 1,
   "dependencies": {
     "@babel/runtime": {
       "version": "7.17.2",
@@ -3764,8 +138,7 @@
     "@material-ui/types": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
-      "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
-      "requires": {}
+      "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A=="
     },
     "@material-ui/utils": {
       "version": "4.11.2",
@@ -4086,8 +459,7 @@
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "ajv": {
       "version": "6.12.6",
@@ -4185,6 +557,14 @@
       "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
       "dev": true
     },
+    "axios": {
+      "version": "0.26.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
+      "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
+      "requires": {
+        "follow-redirects": "^1.14.8"
+      }
+    },
     "axobject-query": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
@@ -4734,8 +1114,7 @@
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
       "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "eslint-scope": {
       "version": "7.1.1",
@@ -4920,6 +1299,11 @@
       "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
       "dev": true
     },
+    "follow-redirects": {
+      "version": "1.14.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
+      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA=="
+    },
     "formik": {
       "version": "2.2.9",
       "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
@@ -5766,8 +2150,7 @@
     "react-collapse": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/react-collapse/-/react-collapse-5.1.1.tgz",
-      "integrity": "sha512-k6cd7csF1o9LBhQ4AGBIdxB60SUEUMQDAnL2z1YvYNr9KoKr+nDkhN6FK7uGaBd/rYrYfrMpzpmJEIeHRYogBw==",
-      "requires": {}
+      "integrity": "sha512-k6cd7csF1o9LBhQ4AGBIdxB60SUEUMQDAnL2z1YvYNr9KoKr+nDkhN6FK7uGaBd/rYrYfrMpzpmJEIeHRYogBw=="
     },
     "react-dom": {
       "version": "17.0.2",
@@ -6091,8 +2474,7 @@
     "styled-jsx": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz",
-      "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==",
-      "requires": {}
+      "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA=="
     },
     "supports-color": {
       "version": "7.2.0",
diff --git a/frontend/package.json b/frontend/package.json
index 37e699c..e2aadd1 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -10,6 +10,7 @@
   "dependencies": {
     "@navikt/ds-css": "^0.15.3",
     "@navikt/ds-react": "^0.16.6",
+    "axios": "^0.26.0",
     "formik": "^2.2.9",
     "next": "12.0.10",
     "react": "17.0.2",
diff --git a/frontend/utils/APIUtils.ts b/frontend/utils/APIUtils.ts
new file mode 100644
index 0000000..b0e1579
--- /dev/null
+++ b/frontend/utils/APIUtils.ts
@@ -0,0 +1,42 @@
+import axios, { AxiosResponse } from 'axios';
+import { URL, PORT } from '../Constants';
+
+
+/**
+ * intern funskjon som bruker axios sin .get() til å gjøre
+ * et api kall mot den ønskede URL adressen
+ * @param endpoint hvilke spesefike ressurser som skal etterspøres
+ * @returns svar fra API-et i json format
+ */
+ export async function getData(endpoint: string = ''): Promise<any> {
+  const response = await axios.get(URL+':'+PORT+'/'+endpoint)
+  .then((data: AxiosResponse) => {
+    return data;
+  })
+  .catch(error => {
+    console.error('There was an error!', error);
+});
+  return response 
+}
+
+interface LoginDetails {
+  successful: boolean,
+  token: string | null,
+  schoolID: number | null,
+}
+/**
+ * funskjon som bruker axios sin .post() til å 
+ * sende en login forespørsel
+ * @param endpoint hvilke spesefike ressurser som skal etterspøres
+ * @returns svar fra API-et i form av true false
+ */
+export async function loginRequest(dataBody: {}): Promise<LoginDetails> {
+  return await axios.post(URL+':'+PORT+'/login', dataBody)
+    .then((response: AxiosResponse) => {
+      return response.data;
+    })
+    .catch(error => {
+      console.error('There was an error!', error);
+      return {successful: false}
+  });
+}
\ No newline at end of file
-- 
GitLab


From 8c44a39e69bb96c8f04411850f8a6ca036e2b172 Mon Sep 17 00:00:00 2001
From: "DESKTOP-J7QTMBR\\mikke" <mikkel.marsteinvikenfiber.no>
Date: Tue, 15 Feb 2022 21:41:32 +0100
Subject: [PATCH 2/6] #5 lagt inn axios + mobx for active user managment

---
 frontend/Interfaces.ts                        |   8 +-
 frontend/components/LoginForm.tsx             |  15 +-
 frontend/components/Nav.tsx                   |  12 +-
 frontend/helpers/ObservableUserStore.ts       |  28 +
 frontend/package-lock.json                    |  10 +
 frontend/package.json                         |   2 +
 frontend/pages/_app.tsx                       |  12 +-
 node_modules/mobx-react-lite/CHANGELOG.md     |  99 ++
 node_modules/mobx-react-lite/LICENSE          |  21 +
 node_modules/mobx-react-lite/README.md        | 174 ++++
 .../mobx-react-lite/batchingForReactDom.js    |   3 +
 .../mobx-react-lite/batchingForReactNative.js |   3 +
 .../mobx-react-lite/batchingOptOut.js         |   3 +
 .../dist/ObserverComponent.d.ts               |  17 +
 node_modules/mobx-react-lite/dist/index.d.ts  |  11 +
 node_modules/mobx-react-lite/dist/index.js    |   8 +
 .../dist/mobxreactlite.cjs.development.js     | 600 +++++++++++++
 .../dist/mobxreactlite.cjs.development.js.map |   1 +
 .../dist/mobxreactlite.cjs.production.min.js  |   2 +
 .../mobxreactlite.cjs.production.min.js.map   |   1 +
 .../dist/mobxreactlite.esm.development.js     | 582 ++++++++++++
 .../dist/mobxreactlite.esm.development.js.map |   1 +
 .../mobx-react-lite/dist/mobxreactlite.esm.js | 582 ++++++++++++
 .../dist/mobxreactlite.esm.js.map             |   1 +
 .../dist/mobxreactlite.esm.production.min.js  |   2 +
 .../mobxreactlite.esm.production.min.js.map   |   1 +
 .../dist/mobxreactlite.umd.development.js     | 601 +++++++++++++
 .../dist/mobxreactlite.umd.development.js.map |   1 +
 .../dist/mobxreactlite.umd.production.min.js  |   2 +
 .../mobxreactlite.umd.production.min.js.map   |   1 +
 .../mobx-react-lite/dist/observer.d.ts        |  13 +
 .../mobx-react-lite/dist/staticRendering.d.ts |   2 +
 .../dist/useAsObservableSource.d.ts           |   1 +
 .../dist/useLocalObservable.d.ts              |   2 +
 .../mobx-react-lite/dist/useLocalStore.d.ts   |   2 +
 .../mobx-react-lite/dist/useObserver.d.ts     |   1 +
 .../utils/FinalizationRegistryWrapper.d.ts    |   7 +
 .../dist/utils/assertEnvironment.d.ts         |   1 +
 ...anupTrackingUsingFinalizationRegister.d.ts |   6 +
 ...eateTimerBasedReactionCleanupTracking.d.ts |   5 +
 .../dist/utils/observerBatching.d.ts          |   3 +
 .../dist/utils/printDebugValue.d.ts           |   2 +
 .../dist/utils/reactBatchedUpdates.d.ts       |   1 +
 .../utils/reactBatchedUpdates.native.d.ts     |   1 +
 .../dist/utils/reactionCleanupTracking.d.ts   |   4 +
 .../utils/reactionCleanupTrackingCommon.d.ts  |  53 ++
 .../mobx-react-lite/dist/utils/utils.d.ts     |   1 +
 .../mobx-react-lite/es/ObserverComponent.js   |  37 +
 .../es/ObserverComponent.js.map               |   1 +
 node_modules/mobx-react-lite/es/index.js      |  29 +
 node_modules/mobx-react-lite/es/index.js.map  |   1 +
 node_modules/mobx-react-lite/es/observer.js   |  77 ++
 .../mobx-react-lite/es/observer.js.map        |   1 +
 .../mobx-react-lite/es/staticRendering.js     |   8 +
 .../mobx-react-lite/es/staticRendering.js.map |   1 +
 .../es/useAsObservableSource.js               |  29 +
 .../es/useAsObservableSource.js.map           |   1 +
 .../mobx-react-lite/es/useLocalObservable.js  |   6 +
 .../es/useLocalObservable.js.map              |   1 +
 .../mobx-react-lite/es/useLocalStore.js       |  11 +
 .../mobx-react-lite/es/useLocalStore.js.map   |   1 +
 .../mobx-react-lite/es/useObserver.js         | 126 +++
 .../mobx-react-lite/es/useObserver.js.map     |   1 +
 .../es/utils/FinalizationRegistryWrapper.js   |   3 +
 .../utils/FinalizationRegistryWrapper.js.map  |   1 +
 .../es/utils/assertEnvironment.js             |   9 +
 .../es/utils/assertEnvironment.js.map         |   1 +
 ...leanupTrackingUsingFinalizationRegister.js |  38 +
 ...upTrackingUsingFinalizationRegister.js.map |   1 +
 ...createTimerBasedReactionCleanupTracking.js | 118 +++
 ...teTimerBasedReactionCleanupTracking.js.map |   1 +
 .../es/utils/observerBatching.js              |  20 +
 .../es/utils/observerBatching.js.map          |   1 +
 .../es/utils/printDebugValue.js               |   5 +
 .../es/utils/printDebugValue.js.map           |   1 +
 .../es/utils/reactBatchedUpdates.js           |   2 +
 .../es/utils/reactBatchedUpdates.js.map       |   1 +
 .../es/utils/reactBatchedUpdates.native.js    |   3 +
 .../utils/reactBatchedUpdates.native.js.map   |   1 +
 .../es/utils/reactionCleanupTracking.js       |   8 +
 .../es/utils/reactionCleanupTracking.js.map   |   1 +
 .../es/utils/reactionCleanupTrackingCommon.js |  21 +
 .../reactionCleanupTrackingCommon.js.map      |   1 +
 .../mobx-react-lite/es/utils/utils.js         |   8 +
 .../mobx-react-lite/es/utils/utils.js.map     |   1 +
 .../mobx-react-lite/lib/ObserverComponent.js  |  40 +
 .../lib/ObserverComponent.js.map              |   1 +
 node_modules/mobx-react-lite/lib/index.js     |  44 +
 node_modules/mobx-react-lite/lib/index.js.map |   1 +
 node_modules/mobx-react-lite/lib/observer.js  |  81 ++
 .../mobx-react-lite/lib/observer.js.map       |   1 +
 .../mobx-react-lite/lib/staticRendering.js    |  13 +
 .../lib/staticRendering.js.map                |   1 +
 .../lib/useAsObservableSource.js              |  33 +
 .../lib/useAsObservableSource.js.map          |   1 +
 .../mobx-react-lite/lib/useLocalObservable.js |  10 +
 .../lib/useLocalObservable.js.map             |   1 +
 .../mobx-react-lite/lib/useLocalStore.js      |  15 +
 .../mobx-react-lite/lib/useLocalStore.js.map  |   1 +
 .../mobx-react-lite/lib/useObserver.js        | 133 +++
 .../mobx-react-lite/lib/useObserver.js.map    |   1 +
 .../lib/utils/FinalizationRegistryWrapper.js  |   6 +
 .../utils/FinalizationRegistryWrapper.js.map  |   1 +
 .../lib/utils/assertEnvironment.js            |  11 +
 .../lib/utils/assertEnvironment.js.map        |   1 +
 ...leanupTrackingUsingFinalizationRegister.js |  42 +
 ...upTrackingUsingFinalizationRegister.js.map |   1 +
 ...createTimerBasedReactionCleanupTracking.js | 122 +++
 ...teTimerBasedReactionCleanupTracking.js.map |   1 +
 .../lib/utils/observerBatching.js             |  26 +
 .../lib/utils/observerBatching.js.map         |   1 +
 .../lib/utils/printDebugValue.js              |   9 +
 .../lib/utils/printDebugValue.js.map          |   1 +
 .../lib/utils/reactBatchedUpdates.js          |   6 +
 .../lib/utils/reactBatchedUpdates.js.map      |   1 +
 .../lib/utils/reactBatchedUpdates.native.js   |   7 +
 .../utils/reactBatchedUpdates.native.js.map   |   1 +
 .../lib/utils/reactionCleanupTracking.js      |  14 +
 .../lib/utils/reactionCleanupTracking.js.map  |   1 +
 .../utils/reactionCleanupTrackingCommon.js    |  25 +
 .../reactionCleanupTrackingCommon.js.map      |   1 +
 .../mobx-react-lite/lib/utils/utils.js        |  12 +
 .../mobx-react-lite/lib/utils/utils.js.map    |   1 +
 node_modules/mobx-react-lite/package.json     | 106 +++
 .../mobx-react-lite/src/ObserverComponent.ts  |  54 ++
 node_modules/mobx-react-lite/src/index.ts     |  37 +
 node_modules/mobx-react-lite/src/observer.ts  | 119 +++
 .../mobx-react-lite/src/staticRendering.ts    |   9 +
 .../src/useAsObservableSource.ts              |  15 +
 .../mobx-react-lite/src/useLocalObservable.ts |   9 +
 .../mobx-react-lite/src/useLocalStore.ts      |  22 +
 .../mobx-react-lite/src/useObserver.ts        | 126 +++
 .../src/utils/FinalizationRegistryWrapper.ts  |  12 +
 .../src/utils/assertEnvironment.ts            |   9 +
 ...leanupTrackingUsingFinalizationRegister.ts |  57 ++
 ...createTimerBasedReactionCleanupTracking.ts | 122 +++
 .../src/utils/observerBatching.ts             |  25 +
 .../src/utils/printDebugValue.ts              |   5 +
 .../src/utils/reactBatchedUpdates.native.ts   |   2 +
 .../src/utils/reactBatchedUpdates.ts          |   1 +
 .../src/utils/reactionCleanupTracking.ts      |  20 +
 .../utils/reactionCleanupTrackingCommon.ts    |  72 ++
 .../mobx-react-lite/src/utils/utils.ts        |   8 +
 node_modules/mobx-react/CHANGELOG.md          | 708 +++++++++++++++
 node_modules/mobx-react/LICENSE               |  21 +
 node_modules/mobx-react/README.md             | 505 +++++++++++
 .../mobx-react/batchingForReactDom.js         |   1 +
 .../mobx-react/batchingForReactNative.js      |   1 +
 node_modules/mobx-react/batchingOptOut.js     |   1 +
 node_modules/mobx-react/dist/Provider.d.ts    |  10 +
 .../mobx-react/dist/disposeOnUnmount.d.ts     |   5 +
 node_modules/mobx-react/dist/index.d.ts       |   7 +
 node_modules/mobx-react/dist/index.js         |   8 +
 node_modules/mobx-react/dist/inject.d.ts      |   5 +
 .../dist/mobxreact.cjs.development.js         | 847 +++++++++++++++++
 .../dist/mobxreact.cjs.development.js.map     |   1 +
 .../dist/mobxreact.cjs.production.min.js      |   2 +
 .../dist/mobxreact.cjs.production.min.js.map  |   1 +
 .../dist/mobxreact.esm.development.js         | 782 ++++++++++++++++
 .../dist/mobxreact.esm.development.js.map     |   1 +
 node_modules/mobx-react/dist/mobxreact.esm.js | 782 ++++++++++++++++
 .../mobx-react/dist/mobxreact.esm.js.map      |   1 +
 .../dist/mobxreact.esm.production.min.js      |   2 +
 .../dist/mobxreact.esm.production.min.js.map  |   1 +
 .../dist/mobxreact.umd.development.js         | 848 ++++++++++++++++++
 .../dist/mobxreact.umd.development.js.map     |   1 +
 .../dist/mobxreact.umd.production.min.js      |   2 +
 .../dist/mobxreact.umd.production.min.js.map  |   1 +
 node_modules/mobx-react/dist/observer.d.ts    |   5 +
 .../mobx-react/dist/observerClass.d.ts        |   2 +
 node_modules/mobx-react/dist/propTypes.d.ts   |  10 +
 .../dist/types/IReactComponent.d.ts           |   2 +
 .../mobx-react/dist/types/IStoresToProps.d.ts |   2 +
 .../mobx-react/dist/types/IValueMap.d.ts      |   1 +
 .../dist/types/IWrappedComponent.d.ts         |   4 +
 node_modules/mobx-react/dist/utils/utils.d.ts |  15 +
 node_modules/mobx-react/package.json          | 103 +++
 node_modules/mobx-react/src/Provider.tsx      |  29 +
 .../mobx-react/src/disposeOnUnmount.ts        |  85 ++
 node_modules/mobx-react/src/globals.d.ts      |   1 +
 node_modules/mobx-react/src/index.ts          |  25 +
 node_modules/mobx-react/src/inject.ts         | 104 +++
 node_modules/mobx-react/src/observer.tsx      |  58 ++
 node_modules/mobx-react/src/observerClass.ts  | 210 +++++
 node_modules/mobx-react/src/propTypes.ts      | 210 +++++
 .../mobx-react/src/types/IReactComponent.ts   |   5 +
 .../mobx-react/src/types/IStoresToProps.ts    |   7 +
 .../mobx-react/src/types/IValueMap.ts         |   1 +
 .../mobx-react/src/types/IWrappedComponent.ts |   4 +
 node_modules/mobx-react/src/utils/utils.ts    | 193 ++++
 package-lock.json                             |  20 +-
 191 files changed, 10609 insertions(+), 15 deletions(-)
 create mode 100644 frontend/helpers/ObservableUserStore.ts
 create mode 100644 node_modules/mobx-react-lite/CHANGELOG.md
 create mode 100644 node_modules/mobx-react-lite/LICENSE
 create mode 100644 node_modules/mobx-react-lite/README.md
 create mode 100644 node_modules/mobx-react-lite/batchingForReactDom.js
 create mode 100644 node_modules/mobx-react-lite/batchingForReactNative.js
 create mode 100644 node_modules/mobx-react-lite/batchingOptOut.js
 create mode 100644 node_modules/mobx-react-lite/dist/ObserverComponent.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/index.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/index.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js
 create mode 100644 node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js.map
 create mode 100644 node_modules/mobx-react-lite/dist/observer.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/staticRendering.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/useAsObservableSource.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/useLocalObservable.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/useLocalStore.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/useObserver.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/FinalizationRegistryWrapper.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/assertEnvironment.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/createReactionCleanupTrackingUsingFinalizationRegister.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/createTimerBasedReactionCleanupTracking.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/observerBatching.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/printDebugValue.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.native.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/reactionCleanupTracking.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/reactionCleanupTrackingCommon.d.ts
 create mode 100644 node_modules/mobx-react-lite/dist/utils/utils.d.ts
 create mode 100644 node_modules/mobx-react-lite/es/ObserverComponent.js
 create mode 100644 node_modules/mobx-react-lite/es/ObserverComponent.js.map
 create mode 100644 node_modules/mobx-react-lite/es/index.js
 create mode 100644 node_modules/mobx-react-lite/es/index.js.map
 create mode 100644 node_modules/mobx-react-lite/es/observer.js
 create mode 100644 node_modules/mobx-react-lite/es/observer.js.map
 create mode 100644 node_modules/mobx-react-lite/es/staticRendering.js
 create mode 100644 node_modules/mobx-react-lite/es/staticRendering.js.map
 create mode 100644 node_modules/mobx-react-lite/es/useAsObservableSource.js
 create mode 100644 node_modules/mobx-react-lite/es/useAsObservableSource.js.map
 create mode 100644 node_modules/mobx-react-lite/es/useLocalObservable.js
 create mode 100644 node_modules/mobx-react-lite/es/useLocalObservable.js.map
 create mode 100644 node_modules/mobx-react-lite/es/useLocalStore.js
 create mode 100644 node_modules/mobx-react-lite/es/useLocalStore.js.map
 create mode 100644 node_modules/mobx-react-lite/es/useObserver.js
 create mode 100644 node_modules/mobx-react-lite/es/useObserver.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/assertEnvironment.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/assertEnvironment.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/observerBatching.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/observerBatching.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/printDebugValue.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/printDebugValue.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js.map
 create mode 100644 node_modules/mobx-react-lite/es/utils/utils.js
 create mode 100644 node_modules/mobx-react-lite/es/utils/utils.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/ObserverComponent.js
 create mode 100644 node_modules/mobx-react-lite/lib/ObserverComponent.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/index.js
 create mode 100644 node_modules/mobx-react-lite/lib/index.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/observer.js
 create mode 100644 node_modules/mobx-react-lite/lib/observer.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/staticRendering.js
 create mode 100644 node_modules/mobx-react-lite/lib/staticRendering.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/useAsObservableSource.js
 create mode 100644 node_modules/mobx-react-lite/lib/useAsObservableSource.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/useLocalObservable.js
 create mode 100644 node_modules/mobx-react-lite/lib/useLocalObservable.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/useLocalStore.js
 create mode 100644 node_modules/mobx-react-lite/lib/useLocalStore.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/useObserver.js
 create mode 100644 node_modules/mobx-react-lite/lib/useObserver.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/assertEnvironment.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/assertEnvironment.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/observerBatching.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/observerBatching.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/printDebugValue.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/printDebugValue.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js.map
 create mode 100644 node_modules/mobx-react-lite/lib/utils/utils.js
 create mode 100644 node_modules/mobx-react-lite/lib/utils/utils.js.map
 create mode 100644 node_modules/mobx-react-lite/package.json
 create mode 100644 node_modules/mobx-react-lite/src/ObserverComponent.ts
 create mode 100644 node_modules/mobx-react-lite/src/index.ts
 create mode 100644 node_modules/mobx-react-lite/src/observer.ts
 create mode 100644 node_modules/mobx-react-lite/src/staticRendering.ts
 create mode 100644 node_modules/mobx-react-lite/src/useAsObservableSource.ts
 create mode 100644 node_modules/mobx-react-lite/src/useLocalObservable.ts
 create mode 100644 node_modules/mobx-react-lite/src/useLocalStore.ts
 create mode 100644 node_modules/mobx-react-lite/src/useObserver.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/FinalizationRegistryWrapper.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/assertEnvironment.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/createTimerBasedReactionCleanupTracking.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/observerBatching.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/printDebugValue.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.native.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/reactionCleanupTracking.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/reactionCleanupTrackingCommon.ts
 create mode 100644 node_modules/mobx-react-lite/src/utils/utils.ts
 create mode 100644 node_modules/mobx-react/CHANGELOG.md
 create mode 100644 node_modules/mobx-react/LICENSE
 create mode 100644 node_modules/mobx-react/README.md
 create mode 100644 node_modules/mobx-react/batchingForReactDom.js
 create mode 100644 node_modules/mobx-react/batchingForReactNative.js
 create mode 100644 node_modules/mobx-react/batchingOptOut.js
 create mode 100644 node_modules/mobx-react/dist/Provider.d.ts
 create mode 100644 node_modules/mobx-react/dist/disposeOnUnmount.d.ts
 create mode 100644 node_modules/mobx-react/dist/index.d.ts
 create mode 100644 node_modules/mobx-react/dist/index.js
 create mode 100644 node_modules/mobx-react/dist/inject.d.ts
 create mode 100644 node_modules/mobx-react/dist/mobxreact.cjs.development.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.cjs.development.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.cjs.production.min.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.cjs.production.min.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.development.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.development.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.production.min.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.esm.production.min.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.umd.development.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.umd.development.js.map
 create mode 100644 node_modules/mobx-react/dist/mobxreact.umd.production.min.js
 create mode 100644 node_modules/mobx-react/dist/mobxreact.umd.production.min.js.map
 create mode 100644 node_modules/mobx-react/dist/observer.d.ts
 create mode 100644 node_modules/mobx-react/dist/observerClass.d.ts
 create mode 100644 node_modules/mobx-react/dist/propTypes.d.ts
 create mode 100644 node_modules/mobx-react/dist/types/IReactComponent.d.ts
 create mode 100644 node_modules/mobx-react/dist/types/IStoresToProps.d.ts
 create mode 100644 node_modules/mobx-react/dist/types/IValueMap.d.ts
 create mode 100644 node_modules/mobx-react/dist/types/IWrappedComponent.d.ts
 create mode 100644 node_modules/mobx-react/dist/utils/utils.d.ts
 create mode 100644 node_modules/mobx-react/package.json
 create mode 100644 node_modules/mobx-react/src/Provider.tsx
 create mode 100644 node_modules/mobx-react/src/disposeOnUnmount.ts
 create mode 100644 node_modules/mobx-react/src/globals.d.ts
 create mode 100644 node_modules/mobx-react/src/index.ts
 create mode 100644 node_modules/mobx-react/src/inject.ts
 create mode 100644 node_modules/mobx-react/src/observer.tsx
 create mode 100644 node_modules/mobx-react/src/observerClass.ts
 create mode 100644 node_modules/mobx-react/src/propTypes.ts
 create mode 100644 node_modules/mobx-react/src/types/IReactComponent.ts
 create mode 100644 node_modules/mobx-react/src/types/IStoresToProps.ts
 create mode 100644 node_modules/mobx-react/src/types/IValueMap.ts
 create mode 100644 node_modules/mobx-react/src/types/IWrappedComponent.ts
 create mode 100644 node_modules/mobx-react/src/utils/utils.ts

diff --git a/frontend/Interfaces.ts b/frontend/Interfaces.ts
index 59344c4..fe2460f 100644
--- a/frontend/Interfaces.ts
+++ b/frontend/Interfaces.ts
@@ -3,7 +3,13 @@ export interface Budget {
   date: Date;
   amount: Number;
 }
-
+export type User = {
+  username: string,
+  schoolID: number,
+  token: string,
+}
 export type GraphDataProps = {
   data: Budget[],
 };
+
+
diff --git a/frontend/components/LoginForm.tsx b/frontend/components/LoginForm.tsx
index f8bb0be..9558ccc 100644
--- a/frontend/components/LoginForm.tsx
+++ b/frontend/components/LoginForm.tsx
@@ -1,10 +1,13 @@
-import React from 'react'
+import React, { useContext } from 'react'
 import { Formik, Field, Form } from 'formik'
 import { TextField } from '@navikt/ds-react';
 import formStyles from '../styles/LoginForm.module.css'
 import { loginRequest } from '../utils/APIUtils';
+import { StoreContext } from '../pages/_app';
 
 export default function LoginForm() {
+    const store = useContext(StoreContext)
+    const dummyRespone = {schoolID: 123, token: "TOKEN@KEYAUTH", successful: true } //remove when backend is ready
   return (
     <Formik
             initialValues={{
@@ -14,7 +17,15 @@ export default function LoginForm() {
 
             onSubmit={async (values) => {
                 await loginRequest(JSON.stringify(values, null, 2))
-                    .then((response) => alert(response.successful))
+                    .then((response) => {
+                        response = dummyRespone; //remove when backend is ready
+                        if(response.successful){
+                            store.setActiveUser({username: values.username, schoolID: response.schoolID!, token: response.token!});
+                        }else{
+                            alert("failed to log in")
+                        }
+                    })
+
             }}
         >
             
diff --git a/frontend/components/Nav.tsx b/frontend/components/Nav.tsx
index 010c423..fb0effb 100644
--- a/frontend/components/Nav.tsx
+++ b/frontend/components/Nav.tsx
@@ -1,11 +1,16 @@
-import React from 'react';
+import React, { useContext } from 'react';
 import Link from 'next/link';
 import Image from 'next/image'
 import { People } from "@navikt/ds-icons";
 import logoImg from '../images/logo.jpg'
 import styles from '../styles/Nav.module.css';
+//import { Observer } from 'mobx-react-lite'
+import { StoreContext } from '../pages/_app';
 
-function Header() {
+
+const Header: React.FC = () => {
+  
+  const store = useContext(StoreContext)
   return (
     <nav className={styles.nav}>
       <div className={styles.logo}>
@@ -22,9 +27,10 @@ function Header() {
           <Link href='/minskole'> Min skole </Link>
         </li>
         <li>
+        {store.loggedIn ? <h1 style={{color: "green"}}>Welcome</h1> : <h1 style={{color: "red"}}>Login</h1>}
           <Link href='/login'> 
           <People color="black" className={styles.peopleIcon}/>
-          </Link>
+          </Link>  
         </li>
         
       </ul>
diff --git a/frontend/helpers/ObservableUserStore.ts b/frontend/helpers/ObservableUserStore.ts
new file mode 100644
index 0000000..4f73955
--- /dev/null
+++ b/frontend/helpers/ObservableUserStore.ts
@@ -0,0 +1,28 @@
+import { makeObservable, observable, computed, action, autorun } from "mobx";
+import { User } from "../Interfaces";
+
+class ObservableUserStore {
+  activeUser: User | null = null;
+
+  constructor() {
+    makeObservable(this, {
+      activeUser: observable,
+      loggedIn: computed,
+      setActiveUser: action,
+    });
+    autorun(() => console.log(this.activeUser));
+  }
+  get loggedIn() {
+    if(this.activeUser){
+      return true
+    }
+    return false
+  }
+
+  setActiveUser(newUser: User | null) {
+    this.activeUser = newUser;
+  }
+}
+
+const userStore = new ObservableUserStore();
+export default userStore;
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 7c5fa5a..6e73869 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1868,6 +1868,16 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "mobx": {
+      "version": "6.3.13",
+      "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.13.tgz",
+      "integrity": "sha512-zDDKDhYUk9QCHQUdLG+wb4Jv/nXutSLt/P8kkwHyjdbrJO4OZS6QTEsrOnrKM39puqXSrJZHdB6+yRys2NBFFA=="
+    },
+    "mobx-react-lite": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz",
+      "integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw=="
+    },
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index e2aadd1..dea920c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -12,6 +12,8 @@
     "@navikt/ds-react": "^0.16.6",
     "axios": "^0.26.0",
     "formik": "^2.2.9",
+    "mobx": "^6.3.13",
+    "mobx-react-lite": "^3.2.3",
     "next": "12.0.10",
     "react": "17.0.2",
     "react-dom": "17.0.2",
diff --git a/frontend/pages/_app.tsx b/frontend/pages/_app.tsx
index d286082..57359b8 100644
--- a/frontend/pages/_app.tsx
+++ b/frontend/pages/_app.tsx
@@ -1,12 +1,18 @@
+import React from 'react';
 import Layout from '../components/Layout'
 import '../styles/globals.css'
 import type { AppProps } from 'next/app'
+import ObservableUserStore from '../helpers/ObservableUserStore';
+
+export const StoreContext = React.createContext(ObservableUserStore);
 
 function MyApp({ Component, pageProps }: AppProps) {
   return ( 
-    <Layout>
-      <Component {...pageProps} />
-    </Layout>
+    <StoreContext.Provider value={ObservableUserStore}>
+      <Layout>
+        <Component {...pageProps} />
+      </Layout>
+    </StoreContext.Provider >
     )
 }
 
diff --git a/node_modules/mobx-react-lite/CHANGELOG.md b/node_modules/mobx-react-lite/CHANGELOG.md
new file mode 100644
index 0000000..adee0f2
--- /dev/null
+++ b/node_modules/mobx-react-lite/CHANGELOG.md
@@ -0,0 +1,99 @@
+# mobx-react-lite
+
+## 3.2.3
+
+### Patch Changes
+
+-   [`4887d200`](https://github.com/mobxjs/mobx/commit/4887d200ba5e1563717a0b4f55e09b9984437990) [#3192](https://github.com/mobxjs/mobx/pull/3192) Thanks [@urugator](https://github.com/urugator)! - Support customizing `displayName` on anonymous components [#2721](https://github.com/mobxjs/mobx/issues/2721).
+
+## 3.2.2
+
+### Patch Changes
+
+-   [`2dcfec09`](https://github.com/mobxjs/mobx/commit/2dcfec093533bd12bb564580b14ce6037ee1ebac) [#3172](https://github.com/mobxjs/mobx/pull/3172) Thanks [@urugator](https://github.com/urugator)! - support legacy context
+
+## 3.2.1
+
+### Patch Changes
+
+-   [`320544a5`](https://github.com/mobxjs/mobx/commit/320544a5d0defb1a1524c83c7a5d0a9dee9de001) [#2983](https://github.com/mobxjs/mobx/pull/2983) Thanks [@urugator](https://github.com/urugator)! - Allow force update to be called infinitely times
+
+*   [`10c762cc`](https://github.com/mobxjs/mobx/commit/10c762cce4871f3599bac6acc2c56776e0b4badd) [#2995](https://github.com/mobxjs/mobx/pull/2995) Thanks [@Bnaya](https://github.com/Bnaya)! - Reduce useObserver gc pressure
+
+## 3.2.0
+
+### Patch Changes
+
+-   Updated dependencies [[`28f8a11d`](https://github.com/mobxjs/mobx/commit/28f8a11d8b94f1aca2eec4ae9c5f45c5ea2f4362)]:
+    -   mobx@6.1.0
+
+## 3.1.7
+
+### Patch Changes
+
+-   [`592e6e99`](https://github.com/mobxjs/mobx/commit/592e6e996c2d5264e162cfb0921a071c1d815c92) [#2743](https://github.com/mobxjs/mobx/pull/2743) Thanks [@vkrol](https://github.com/vkrol)! - Remove `sideEffects` section in `mobx-react-lite` `package.json`
+
+-   Updated dependencies [[`6b304232`](https://github.com/mobxjs/mobx/commit/6b30423266e5418a3f20389d0bd0eae31f3384d2), [`83b84fd3`](https://github.com/mobxjs/mobx/commit/83b84fd354f2253fdd8ea556e217a92fc2633c00), [`65c7b73b`](https://github.com/mobxjs/mobx/commit/65c7b73b7f0b1a69a1a2786b5f484419d129d10b), [`989390d4`](https://github.com/mobxjs/mobx/commit/989390d46bbe9941b61ac6c6d1292f96445e7cc3), [`dea1cf18`](https://github.com/mobxjs/mobx/commit/dea1cf189b0f43929f4f626229d34a80bd10212e), [`592e6e99`](https://github.com/mobxjs/mobx/commit/592e6e996c2d5264e162cfb0921a071c1d815c92)]:
+    -   mobx@6.0.5
+
+## 3.1.6
+
+### Patch Changes
+
+-   [`2f3dcb27`](https://github.com/mobxjs/mobx/commit/2f3dcb274f795ffca4ae724b6b4795958620838d) Thanks [@FredyC](https://github.com/FredyC)! - Fix names of UMD exports [#2517](https://github.com/mobxjs/mobx/issues/2617)
+
+-   Updated dependencies [[`79a09f49`](https://github.com/mobxjs/mobx/commit/79a09f49a9f2baddbab8d89e9a7ac07cffadf624)]:
+    -   mobx@6.0.4
+
+## 3.1.5
+
+### Patch Changes
+
+-   [`01a050f7`](https://github.com/mobxjs/mobx/commit/01a050f7603183e6833b7fd948adb4fbe1437f5a) Thanks [@FredyC](https://github.com/FredyC)! - Fix use of react-dom vs react-native
+
+    The `es` folder content is compiled only without transpilation to keep `utils/reactBatchedUpdates` which exists in DOM and RN versions. The bundled `esm` is still kept around too, especially the prod/dev ones that should be utilized in modern browser environments.
+
+## 3.1.4
+
+### Patch Changes
+
+-   [`8bbbc7c0`](https://github.com/mobxjs/mobx/commit/8bbbc7c0df77cd79530add5db2d6a04cfe6d84b1) Thanks [@FredyC](https://github.com/FredyC)! - Fix names of dist files (for real now). Third time is the charm 😅
+
+## 3.1.3
+
+### Patch Changes
+
+-   [`b7aa9d35`](https://github.com/mobxjs/mobx/commit/b7aa9d35432888ee5dd80a6c9dcbc18b04a0346c) Thanks [@FredyC](https://github.com/FredyC)! - Fixed wrong package name for dist files
+
+## 3.1.2
+
+### Patch Changes
+
+-   [`5239db80`](https://github.com/mobxjs/mobx/commit/5239db80cf000026906c28a035725933d4dd6823) Thanks [@FredyC](https://github.com/FredyC)! - Fixed release with missing dist files
+
+## 3.1.1
+
+### Patch Changes
+
+-   [`81a2f865`](https://github.com/mobxjs/mobx/commit/81a2f8654d9656e2e831176e45cbf926fbc364e0) Thanks [@FredyC](https://github.com/FredyC)! - ESM bundles without NODE_ENV present are available in dist folder. This useful for consumption in browser environment that supports ESM Choose either `esm.production.min.js` or `esm.development.js` from `dist` folder.
+
+## 3.1.0
+
+### Minor Changes
+
+-   [`a0e5fea`](https://github.com/mobxjs/mobx-react-lite/commit/a0e5feaeede68b0bac035f60bf2a7edff3fa1269) [#329](https://github.com/mobxjs/mobx-react-lite/pull/329) Thanks [@RoystonS](https://github.com/RoystonS)! - expose `clearTimers` function to tidy up background timers, allowing test frameworks such as Jest to exit immediately
+
+### Patch Changes
+
+-   [`fafb136`](https://github.com/mobxjs/mobx-react-lite/commit/fafb136cce2847b83174cbd15af803442a9a0023) [#332](https://github.com/mobxjs/mobx-react-lite/pull/332) Thanks [@Bnaya](https://github.com/Bnaya)! - Introduce alternative way for managing cleanup of reactions.
+    This is internal change and shouldn't affect functionality of the library.
+
+## 3.0.1
+
+### Patch Changes
+
+-   [`570e8d5`](https://github.com/mobxjs/mobx-react-lite/commit/570e8d594bac415cf9a6c6771080fec043161d0b) [#328](https://github.com/mobxjs/mobx-react-lite/pull/328) Thanks [@mweststrate](https://github.com/mweststrate)! - If observable data changed between mount and useEffect, the render reaction would incorrectly be disposed causing incorrect suspension of upstream computed values
+
+*   [`1d6f0a8`](https://github.com/mobxjs/mobx-react-lite/commit/1d6f0a8dd0ff34d7e7cc71946ed670c31193572d) [#326](https://github.com/mobxjs/mobx-react-lite/pull/326) Thanks [@FredyC](https://github.com/FredyC)! - No important changes, just checking new setup for releases.
+
+> Prior 3.0.0 see GitHub releases for changelog
diff --git a/node_modules/mobx-react-lite/LICENSE b/node_modules/mobx-react-lite/LICENSE
new file mode 100644
index 0000000..b58beca
--- /dev/null
+++ b/node_modules/mobx-react-lite/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Michel Weststrate
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/mobx-react-lite/README.md b/node_modules/mobx-react-lite/README.md
new file mode 100644
index 0000000..bebccee
--- /dev/null
+++ b/node_modules/mobx-react-lite/README.md
@@ -0,0 +1,174 @@
+# mobx-react-lite
+
+[![CircleCI](https://circleci.com/gh/mobxjs/mobx-react-lite.svg?style=svg)](https://circleci.com/gh/mobxjs/mobx-react-lite)[![Coverage Status](https://coveralls.io/repos/github/mobxjs/mobx-react-lite/badge.svg)](https://coveralls.io/github/mobxjs/mobx-react-lite)[![NPM downloads](https://img.shields.io/npm/dm/mobx-react-lite.svg?style=flat)](https://npmjs.com/package/mobx-react-lite)[![Minzipped size](https://img.shields.io/bundlephobia/minzip/mobx-react-lite.svg)](https://bundlephobia.com/result?p=mobx-react-lite)
+
+[![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.svg?v=101)](https://github.com/ellerbrock/typescript-badges/)[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
+
+[![Discuss on Github](https://img.shields.io/badge/discuss%20on-GitHub-orange)](https://github.com/mobxjs/mobx/discussions)
+[![View changelog](https://img.shields.io/badge/changelogs.xyz-Explore%20Changelog-brightgreen)](https://changelogs.xyz/mobx-react-lite)
+
+This is a lighter version of [mobx-react](https://github.com/mobxjs/mobx-react) which supports React **functional components only** and as such makes the library slightly faster and smaller (_only 1.5kB gzipped_). Note however that it is possible to use `<Observer>` inside the render of class components.
+Unlike `mobx-react`, it doesn't `Provider`/`inject`, as `useContext` can be used instead.
+
+## Compatibility table (major versions)
+
+| mobx | mobx-react-lite | Browser                                        |
+| ---- | --------------- | ---------------------------------------------- |
+| 6    | 3               | Modern browsers (IE 11+ in compatibility mode) |
+| 5    | 2               | Modern browsers                                |
+| 4    | 2               | IE 11+, RN w/o Proxy support                   |
+
+`mobx-react-lite` requires React 16.8 or higher.
+
+## User Guide 👉 https://mobx.js.org/react-integration.html
+
+---
+
+## API reference âš’
+
+### **`observer<P>(baseComponent: FunctionComponent<P>): FunctionComponent<P>`**
+
+The observer converts a component into a reactive component, which tracks which observables are used automatically and re-renders the component when one of these values changes.
+Can only be used for function components. For class component support see the `mobx-react` package.
+
+### **`<Observer>{renderFn}</Observer>`**
+
+Is a React component, which applies observer to an anonymous region in your component. `<Observer>` can be used both inside class and function components.
+
+### **`useLocalObservable<T>(initializer: () => T, annotations?: AnnotationsMap<T>): T`**
+
+Creates an observable object with the given properties, methods and computed values.
+
+Note that computed values cannot directly depend on non-observable values, but only on observable values, so it might be needed to sync properties into the observable using `useEffect` (see the example below at `useAsObservableSource`).
+
+`useLocalObservable` is a short-hand for:
+
+`const [state] = useState(() => observable(initializer(), annotations, { autoBind: true }))`
+
+### **`enableStaticRendering(enable: true)`**
+
+Call `enableStaticRendering(true)` when running in an SSR environment, in which `observer` wrapped components should never re-render, but cleanup after the first rendering automatically. Use `isUsingStaticRendering()` to inspect the current setting.
+
+---
+
+## Deprecated APIs
+
+### **`useObserver<T>(fn: () => T, baseComponentName = "observed", options?: IUseObserverOptions): T`** (deprecated)
+
+_This API is deprecated in 3.\*. It is often used wrong (e.g. to select data rather than for rendering, and `<Observer>` better decouples the rendering from the component updates_
+
+```ts
+interface IUseObserverOptions {
+    // optional custom hook that should make a component re-render (or not) upon changes
+    // Supported in 2.x only
+    useForceUpdate: () => () => void
+}
+```
+
+It allows you to use an observer like behaviour, but still allowing you to optimize the component in any way you want (e.g. using memo with a custom areEqual, using forwardRef, etc.) and to declare exactly the part that is observed (the render phase).
+
+### **`useLocalStore<T, S>(initializer: () => T, source?: S): T`** (deprecated)
+
+_This API is deprecated in 3.\*. Use `useLocalObservable` instead. They do roughly the same, but `useLocalObservable` accepts an set of annotations as second argument, rather than a `source` object. Using `source` is not recommended, see the deprecation message at `useAsObservableSource` for details_
+
+Local observable state can be introduced by using the useLocalStore hook, that runs its initializer function once to create an observable store and keeps it around for a lifetime of a component.
+
+The annotations are similar to the annotations that are passed in to MobX's [`observable`](https://mobx.js.org/observable.html#available-annotations) API, and can be used to override the automatic member inference of specific fields.
+
+### **`useAsObservableSource<T>(source: T): T`** (deprecated)
+
+The useAsObservableSource hook can be used to turn any set of values into an observable object that has a stable reference (the same object is returned every time from the hook).
+
+_This API is deprecated in 3.\* as it relies on observables to be updated during rendering which is an anti-pattern. Instead, use `useEffect` to synchronize non-observable values with values. Example:_
+
+```javascript
+// Before:
+function Measurement({ unit }) {
+    const observableProps = useAsObservableSource({ unit })
+    const state = useLocalStore(() => ({
+        length: 0,
+        get lengthWithUnit() {
+            // lengthWithUnit can only depend on observables, hence the above conversion with `useAsObservableSource`
+            return observableProps.unit === "inch"
+                ? `${this.length * 2.54} inch`
+                : `${this.length} cm`
+        }
+    }))
+
+    return <h1>{state.lengthWithUnit}</h1>
+}
+
+// After:
+function Measurement({ unit }) {
+    const state = useLocalObservable(() => ({
+        unit, // the initial unit
+        length: 0,
+        get lengthWithUnit() {
+            // lengthWithUnit can only depend on observables, hence the above conversion with `useAsObservableSource`
+            return this.unit === "inch" ? `${this.length * 2.54} inch` : `${this.length} cm`
+        }
+    }))
+
+    useEffect(() => {
+        // sync the unit from 'props' into the observable 'state'
+        state.unit = unit
+    }, [unit])
+
+    return <h1>{state.lengthWithUnit}</h1>
+}
+```
+
+Note that, at your own risk, it is also possible to not use `useEffect`, but do `state.unit = unit` instead in the rendering.
+This is closer to the old behavior, but React will warn correctly about this if this would affect the rendering of other components.
+
+## Observer batching (deprecated)
+
+_Note: configuring observer batching is only needed when using `mobx-react-lite` 2.0.* or 2.1.*. From 2.2 onward it will be configured automatically based on the availability of react-dom / react-native packages_
+
+[Check out the elaborate explanation](https://github.com/mobxjs/mobx-react/pull/787#issuecomment-573599793).
+
+In short without observer batching the React doesn't guarantee the order component rendering in some cases. We highly recommend that you configure batching to avoid these random surprises.
+
+Import one of these before any React rendering is happening, typically `index.js/ts`. For Jest tests you can utilize [setupFilesAfterEnv](https://jestjs.io/docs/en/configuration#setupfilesafterenv-array).
+
+**React DOM:**
+
+> import 'mobx-react-lite/batchingForReactDom'
+
+**React Native:**
+
+> import 'mobx-react-lite/batchingForReactNative'
+
+### Opt-out
+
+To opt-out from batching in some specific cases, simply import the following to silence the warning.
+
+> import 'mobx-react-lite/batchingOptOut'
+
+### Custom batched updates
+
+Above imports are for a convenience to utilize standard versions of batching. If you for some reason have customized version of batched updates, you can do the following instead.
+
+```js
+import { observerBatching } from "mobx-react-lite"
+observerBatching(customBatchedUpdates)
+```
+
+## Testing
+
+Running the full test suite now requires node 14+
+But the library itself does not have this limitation
+
+In order to avoid memory leaks due to aborted renders from React
+fiber handling or React `StrictMode`, on environments that does not support [FinalizationRegistry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry), this library needs to
+run timers to tidy up the remains of the aborted renders.
+
+This can cause issues with test frameworks such as Jest
+which require that timers be cleaned up before the tests
+can exit.
+
+### **`clearTimers()`**
+
+Call `clearTimers()` in the `afterEach` of your tests to ensure
+that `mobx-react-lite` cleans up immediately and allows tests
+to exit.
diff --git a/node_modules/mobx-react-lite/batchingForReactDom.js b/node_modules/mobx-react-lite/batchingForReactDom.js
new file mode 100644
index 0000000..c5193da
--- /dev/null
+++ b/node_modules/mobx-react-lite/batchingForReactDom.js
@@ -0,0 +1,3 @@
+if ("production" !== process.env.NODE_ENV) {
+    console.warn("[mobx-react-lite] importing batchingForReactDom is no longer needed")
+}
diff --git a/node_modules/mobx-react-lite/batchingForReactNative.js b/node_modules/mobx-react-lite/batchingForReactNative.js
new file mode 100644
index 0000000..fbfe34d
--- /dev/null
+++ b/node_modules/mobx-react-lite/batchingForReactNative.js
@@ -0,0 +1,3 @@
+if ("production" !== process.env.NODE_ENV) {
+    console.warn("[mobx-react-lite] importing batchingForReactNative is no longer needed")
+}
diff --git a/node_modules/mobx-react-lite/batchingOptOut.js b/node_modules/mobx-react-lite/batchingOptOut.js
new file mode 100644
index 0000000..8b6e963
--- /dev/null
+++ b/node_modules/mobx-react-lite/batchingOptOut.js
@@ -0,0 +1,3 @@
+if ("production" !== process.env.NODE_ENV) {
+    console.warn("[mobx-react-lite] importing batchingOptOut is no longer needed")
+}
diff --git a/node_modules/mobx-react-lite/dist/ObserverComponent.d.ts b/node_modules/mobx-react-lite/dist/ObserverComponent.d.ts
new file mode 100644
index 0000000..bd329ba
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/ObserverComponent.d.ts
@@ -0,0 +1,17 @@
+/// <reference types="react" />
+interface IObserverProps {
+    children?(): React.ReactElement | null;
+    render?(): React.ReactElement | null;
+}
+declare function ObserverComponent({ children, render }: IObserverProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
+declare namespace ObserverComponent {
+    var propTypes: {
+        children: typeof ObserverPropsCheck;
+        render: typeof ObserverPropsCheck;
+    };
+    var displayName: string;
+}
+export { ObserverComponent as Observer };
+declare function ObserverPropsCheck(props: {
+    [k: string]: any;
+}, key: string, componentName: string, location: any, propFullName: string): Error | null;
diff --git a/node_modules/mobx-react-lite/dist/index.d.ts b/node_modules/mobx-react-lite/dist/index.d.ts
new file mode 100644
index 0000000..470d09e
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/index.d.ts
@@ -0,0 +1,11 @@
+import "./utils/assertEnvironment";
+export { isUsingStaticRendering, enableStaticRendering } from "./staticRendering";
+export { observer, IObserverOptions } from "./observer";
+export { Observer } from "./ObserverComponent";
+export { useLocalObservable } from "./useLocalObservable";
+export { useLocalStore } from "./useLocalStore";
+export { useAsObservableSource } from "./useAsObservableSource";
+export { resetCleanupScheduleForTests as clearTimers } from "./utils/reactionCleanupTracking";
+export declare function useObserver<T>(fn: () => T, baseComponentName?: string): T;
+export { isObserverBatched, observerBatching } from "./utils/observerBatching";
+export declare function useStaticRendering(enable: boolean): void;
diff --git a/node_modules/mobx-react-lite/dist/index.js b/node_modules/mobx-react-lite/dist/index.js
new file mode 100644
index 0000000..48d96e4
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/index.js
@@ -0,0 +1,8 @@
+
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./mobxreactlite.cjs.production.min.js')
+} else {
+  module.exports = require('./mobxreactlite.cjs.development.js')
+}
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js
new file mode 100644
index 0000000..4bb913b
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js
@@ -0,0 +1,600 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var mobx = require('mobx');
+var React = require('react');
+var React__default = _interopDefault(React);
+var reactDom = require('react-dom');
+
+if (!React.useState) {
+  throw new Error("mobx-react-lite requires React with Hooks support");
+}
+
+if (!mobx.makeObservable) {
+  throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+}
+
+function defaultNoopBatch(callback) {
+  callback();
+}
+function observerBatching(reactionScheduler) {
+  if (!reactionScheduler) {
+    reactionScheduler = defaultNoopBatch;
+
+    {
+      console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+    }
+  }
+
+  mobx.configure({
+    reactionScheduler: reactionScheduler
+  });
+}
+var isObserverBatched = function isObserverBatched() {
+  {
+    console.warn("[MobX] Deprecated");
+  }
+
+  return true;
+};
+
+var deprecatedMessages = [];
+function useDeprecated(msg) {
+  if (!deprecatedMessages.includes(msg)) {
+    deprecatedMessages.push(msg);
+    console.warn(msg);
+  }
+}
+
+function printDebugValue(v) {
+  return mobx.getDependencyTree(v);
+}
+
+var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+
+function createTrackingData(reaction) {
+  var trackingData = {
+    reaction: reaction,
+    mounted: false,
+    changedBeforeMount: false,
+    cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+  };
+  return trackingData;
+}
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+
+var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+
+var CLEANUP_TIMER_LOOP_MILLIS = 10000;
+
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+
+function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+  var cleanupTokenToReactionTrackingMap = new Map();
+  var globalCleanupTokensCounter = 1;
+  var registry = new FinalizationRegistry(function cleanupFunction(token) {
+    var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+
+    if (trackedReaction) {
+      trackedReaction.reaction.dispose();
+      cleanupTokenToReactionTrackingMap["delete"](token);
+    }
+  });
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction, objectRetainedByReact) {
+      var token = globalCleanupTokensCounter++;
+      registry.register(objectRetainedByReact, token, reactionTrackingRef);
+      reactionTrackingRef.current = createTrackingData(reaction);
+      reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+      cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: function recordReactionAsCommitted(reactionRef) {
+      registry.unregister(reactionRef);
+
+      if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+        cleanupTokenToReactionTrackingMap["delete"](reactionRef.current.finalizationRegistryCleanupToken);
+      }
+    },
+    forceCleanupTimerToRunNowForTests: function forceCleanupTimerToRunNowForTests() {// When FinalizationRegistry in use, this this is no-op
+    },
+    resetCleanupScheduleForTests: function resetCleanupScheduleForTests() {// When FinalizationRegistry in use, this this is no-op
+    }
+  };
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _unsupportedIterableToArray(o, minLen) {
+  if (!o) return;
+  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+  var n = Object.prototype.toString.call(o).slice(8, -1);
+  if (n === "Object" && o.constructor) n = o.constructor.name;
+  if (n === "Map" || n === "Set") return Array.from(o);
+  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+}
+
+function _arrayLikeToArray(arr, len) {
+  if (len == null || len > arr.length) len = arr.length;
+
+  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+  return arr2;
+}
+
+function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+  if (it) return (it = it.call(o)).next.bind(it);
+
+  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+    if (it) o = it;
+    var i = 0;
+    return function () {
+      if (i >= o.length) return {
+        done: true
+      };
+      return {
+        done: false,
+        value: o[i++]
+      };
+    };
+  }
+
+  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+
+function createTimerBasedReactionCleanupTracking() {
+  /**
+   * Reactions created by components that have yet to be fully mounted.
+   */
+  var uncommittedReactionRefs = new Set();
+  /**
+   * Latest 'uncommitted reactions' cleanup timer handle.
+   */
+
+  var reactionCleanupHandle;
+  /* istanbul ignore next */
+
+  /**
+   * Only to be used by test functions; do not export outside of mobx-react-lite
+   */
+
+  function forceCleanupTimerToRunNowForTests() {
+    // This allows us to control the execution of the cleanup timer
+    // to force it to run at awkward times in unit tests.
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      cleanUncommittedReactions();
+    }
+  }
+  /* istanbul ignore next */
+
+
+  function resetCleanupScheduleForTests() {
+    if (uncommittedReactionRefs.size > 0) {
+      for (var _iterator = _createForOfIteratorHelperLoose(uncommittedReactionRefs), _step; !(_step = _iterator()).done;) {
+        var ref = _step.value;
+        var tracking = ref.current;
+
+        if (tracking) {
+          tracking.reaction.dispose();
+          ref.current = null;
+        }
+      }
+
+      uncommittedReactionRefs.clear();
+    }
+
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      reactionCleanupHandle = undefined;
+    }
+  }
+
+  function ensureCleanupTimerRunning() {
+    if (reactionCleanupHandle === undefined) {
+      reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);
+    }
+  }
+
+  function scheduleCleanupOfReactionIfLeaked(ref) {
+    uncommittedReactionRefs.add(ref);
+    ensureCleanupTimerRunning();
+  }
+
+  function recordReactionAsCommitted(reactionRef) {
+    uncommittedReactionRefs["delete"](reactionRef);
+  }
+  /**
+   * Run by the cleanup timer to dispose any outstanding reactions
+   */
+
+
+  function cleanUncommittedReactions() {
+    reactionCleanupHandle = undefined; // Loop through all the candidate leaked reactions; those older
+    // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+
+    var now = Date.now();
+    uncommittedReactionRefs.forEach(function (ref) {
+      var tracking = ref.current;
+
+      if (tracking) {
+        if (now >= tracking.cleanAt) {
+          // It's time to tidy up this leaked reaction.
+          tracking.reaction.dispose();
+          ref.current = null;
+          uncommittedReactionRefs["delete"](ref);
+        }
+      }
+    });
+
+    if (uncommittedReactionRefs.size > 0) {
+      // We've just finished a round of cleanups but there are still
+      // some leak candidates outstanding.
+      ensureCleanupTimerRunning();
+    }
+  }
+
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction,
+    /**
+     * On timer based implementation we don't really need this object,
+     * but we keep the same api
+     */
+    objectRetainedByReact) {
+      reactionTrackingRef.current = createTrackingData(reaction);
+      scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: recordReactionAsCommitted,
+    forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+    resetCleanupScheduleForTests: resetCleanupScheduleForTests
+  };
+}
+
+var _ref = FinalizationRegistryLocal ? /*#__PURE__*/createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryLocal) : /*#__PURE__*/createTimerBasedReactionCleanupTracking(),
+    addReactionToTrack = _ref.addReactionToTrack,
+    recordReactionAsCommitted = _ref.recordReactionAsCommitted,
+    resetCleanupScheduleForTests = _ref.resetCleanupScheduleForTests;
+
+var globalIsUsingStaticRendering = false;
+function enableStaticRendering(enable) {
+  globalIsUsingStaticRendering = enable;
+}
+function isUsingStaticRendering() {
+  return globalIsUsingStaticRendering;
+}
+
+function observerComponentNameFor(baseComponentName) {
+  return "observer" + baseComponentName;
+}
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+
+
+var ObjectToBeRetainedByReact = function ObjectToBeRetainedByReact() {};
+
+function objectToBeRetainedByReactFactory() {
+  return new ObjectToBeRetainedByReact();
+}
+
+function useObserver(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  if (isUsingStaticRendering()) {
+    return fn();
+  }
+
+  var _React$useState = React__default.useState(objectToBeRetainedByReactFactory),
+      objectRetainedByReact = _React$useState[0]; // Force update, see #2982
+
+
+  var _React$useState2 = React__default.useState(),
+      setState = _React$useState2[1];
+
+  var forceUpdate = function forceUpdate() {
+    return setState([]);
+  }; // StrictMode/ConcurrentMode/Suspense may mean that our component is
+  // rendered and abandoned multiple times, so we need to track leaked
+  // Reactions.
+
+
+  var reactionTrackingRef = React__default.useRef(null);
+
+  if (!reactionTrackingRef.current) {
+    // First render for this component (or first time since a previous
+    // reaction from an abandoned render was disposed).
+    var newReaction = new mobx.Reaction(observerComponentNameFor(baseComponentName), function () {
+      // Observable has changed, meaning we want to re-render
+      // BUT if we're a component that hasn't yet got to the useEffect()
+      // stage, we might be a component that _started_ to render, but
+      // got dropped, and we don't want to make state changes then.
+      // (It triggers warnings in StrictMode, for a start.)
+      if (trackingData.mounted) {
+        // We have reached useEffect(), so we're mounted, and can trigger an update
+        forceUpdate();
+      } else {
+        // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+        // when (and if) useEffect() arrives.
+        trackingData.changedBeforeMount = true;
+      }
+    });
+    var trackingData = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
+  }
+
+  var reaction = reactionTrackingRef.current.reaction;
+  React__default.useDebugValue(reaction, printDebugValue);
+  React__default.useEffect(function () {
+    // Called on first mount only
+    recordReactionAsCommitted(reactionTrackingRef);
+
+    if (reactionTrackingRef.current) {
+      // Great. We've already got our reaction from our render;
+      // all we need to do is to record that it's now mounted,
+      // to allow future observable changes to trigger re-renders
+      reactionTrackingRef.current.mounted = true; // Got a change before first mount, force an update
+
+      if (reactionTrackingRef.current.changedBeforeMount) {
+        reactionTrackingRef.current.changedBeforeMount = false;
+        forceUpdate();
+      }
+    } else {
+      // The reaction we set up in our render has been disposed.
+      // This can be due to bad timings of renderings, e.g. our
+      // component was paused for a _very_ long time, and our
+      // reaction got cleaned up
+      // Re-create the reaction
+      reactionTrackingRef.current = {
+        reaction: new mobx.Reaction(observerComponentNameFor(baseComponentName), function () {
+          // We've definitely already been mounted at this point
+          forceUpdate();
+        }),
+        mounted: true,
+        changedBeforeMount: false,
+        cleanAt: Infinity
+      };
+      forceUpdate();
+    }
+
+    return function () {
+      reactionTrackingRef.current.reaction.dispose();
+      reactionTrackingRef.current = null;
+    };
+  }, []); // render the original component, but have the
+  // reaction track the observables, so that rendering
+  // can be invalidated (see above) once a dependency changes
+
+  var rendering;
+  var exception;
+  reaction.track(function () {
+    try {
+      rendering = fn();
+    } catch (e) {
+      exception = e;
+    }
+  });
+
+  if (exception) {
+    throw exception; // re-throw any exceptions caught during rendering
+  }
+
+  return rendering;
+}
+
+function observer(baseComponent, options) {
+  // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+  if (isUsingStaticRendering()) {
+    return baseComponent;
+  }
+
+  var realOptions = _extends({
+    forwardRef: false
+  }, options);
+
+  var baseComponentName = baseComponent.displayName || baseComponent.name;
+
+  var wrappedComponent = function wrappedComponent(props, ref) {
+    return useObserver(function () {
+      return baseComponent(props, ref);
+    }, baseComponentName);
+  }; // Don't set `displayName` for anonymous components,
+  // so the `displayName` can be customized by user, see #3192.
+
+
+  if (baseComponentName !== "") {
+    wrappedComponent.displayName = baseComponentName;
+  } // Support legacy context: `contextTypes` must be applied before `memo`
+
+
+  if (baseComponent.contextTypes) {
+    wrappedComponent.contextTypes = baseComponent.contextTypes;
+  } // memo; we are not interested in deep updates
+  // in props; we assume that if deep objects are changed,
+  // this is in observables, which would have been tracked anyway
+
+
+  var memoComponent;
+
+  if (realOptions.forwardRef) {
+    // we have to use forwardRef here because:
+    // 1. it cannot go before memo, only after it
+    // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+    //    since it wouldn't be a callable function anymore
+    memoComponent = React.memo(React.forwardRef(wrappedComponent));
+  } else {
+    memoComponent = React.memo(wrappedComponent);
+  }
+
+  copyStaticProperties(baseComponent, memoComponent);
+
+  {
+    Object.defineProperty(memoComponent, "contextTypes", {
+      set: function set() {
+        var _this$type;
+
+        throw new Error("[mobx-react-lite] `" + (this.displayName || ((_this$type = this.type) == null ? void 0 : _this$type.displayName) || "Component") + ".contextTypes` must be set before applying `observer`.");
+      }
+    });
+  }
+
+  return memoComponent;
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+var hoistBlackList = {
+  $$typeof: true,
+  render: true,
+  compare: true,
+  type: true,
+  // Don't redefine `displayName`,
+  // it's defined as getter-setter pair on `memo` (see #3192).
+  displayName: true
+};
+
+function copyStaticProperties(base, target) {
+  Object.keys(base).forEach(function (key) {
+    if (!hoistBlackList[key]) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+
+function ObserverComponent(_ref) {
+  var children = _ref.children,
+      render = _ref.render;
+  var component = children || render;
+
+  if (typeof component !== "function") {
+    return null;
+  }
+
+  return useObserver(component);
+}
+
+{
+  ObserverComponent.propTypes = {
+    children: ObserverPropsCheck,
+    render: ObserverPropsCheck
+  };
+}
+
+ObserverComponent.displayName = "Observer";
+
+function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+  var extraKey = key === "children" ? "render" : "children";
+  var hasProp = typeof props[key] === "function";
+  var hasExtraProp = typeof props[extraKey] === "function";
+
+  if (hasProp && hasExtraProp) {
+    return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+  }
+
+  if (hasProp || hasExtraProp) {
+    return null;
+  }
+
+  return new Error("Invalid prop `" + propFullName + "` of type `" + typeof props[key] + "` supplied to" + " `" + componentName + "`, expected `function`.");
+}
+
+function useLocalObservable(initializer, annotations) {
+  return React.useState(function () {
+    return mobx.observable(initializer(), annotations, {
+      autoBind: true
+    });
+  })[0];
+}
+
+function useAsObservableSource(current) {
+  useDeprecated("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+
+  var _useState = React.useState(function () {
+    return mobx.observable(current, {}, {
+      deep: false
+    });
+  }),
+      res = _useState[0];
+
+  mobx.runInAction(function () {
+    Object.assign(res, current);
+  });
+  return res;
+}
+
+function useLocalStore(initializer, current) {
+  useDeprecated("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+  var source = current && useAsObservableSource(current);
+  return React.useState(function () {
+    return mobx.observable(initializer(source), undefined, {
+      autoBind: true
+    });
+  })[0];
+}
+
+observerBatching(reactDom.unstable_batchedUpdates);
+function useObserver$1(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  {
+    useDeprecated("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+  }
+
+  return useObserver(fn, baseComponentName);
+}
+function useStaticRendering(enable) {
+  {
+    console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+  }
+
+  enableStaticRendering(enable);
+}
+
+exports.Observer = ObserverComponent;
+exports.clearTimers = resetCleanupScheduleForTests;
+exports.enableStaticRendering = enableStaticRendering;
+exports.isObserverBatched = isObserverBatched;
+exports.isUsingStaticRendering = isUsingStaticRendering;
+exports.observer = observer;
+exports.observerBatching = observerBatching;
+exports.useAsObservableSource = useAsObservableSource;
+exports.useLocalObservable = useLocalObservable;
+exports.useLocalStore = useLocalStore;
+exports.useObserver = useObserver$1;
+exports.useStaticRendering = useStaticRendering;
+//# sourceMappingURL=mobxreactlite.cjs.development.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js.map
new file mode 100644
index 0000000..0950172
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.cjs.development.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/utils.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useLocalObservable.ts","../src/useAsObservableSource.ts","../src/useLocalStore.ts","../src/index.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","const deprecatedMessages: string[] = []\n\nexport function useDeprecated(msg: string) {\n    if (!deprecatedMessages.includes(msg)) {\n        deprecatedMessages.push(msg)\n        console.warn(msg)\n    }\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","console","warn","configure","isObserverBatched","deprecatedMessages","useDeprecated","msg","includes","push","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","trackingData","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","CLEANUP_TIMER_LOOP_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","cleanupFunction","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","uncommittedReactionRefs","Set","reactionCleanupHandle","clearTimeout","cleanUncommittedReactions","size","ref","tracking","clear","ensureCleanupTimerRunning","setTimeout","scheduleCleanupOfReactionIfLeaked","add","forEach","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","useDebugValue","useEffect","Infinity","rendering","exception","track","e","observer","baseComponent","options","realOptions","forwardRef","displayName","name","wrappedComponent","props","contextTypes","memoComponent","memo","copyStaticProperties","Object","defineProperty","type","hoistBlackList","$$typeof","render","compare","base","target","keys","key","getOwnPropertyDescriptor","ObserverComponent","children","component","propTypes","ObserverPropsCheck","componentName","location","propFullName","extraKey","hasProp","hasExtraProp","useLocalObservable","initializer","annotations","observable","autoBind","useAsObservableSource","deep","res","runInAction","assign","useLocalStore","source","batch","useObserverOriginal","useStaticRendering"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js
new file mode 100644
index 0000000..4198ac2
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js
@@ -0,0 +1,2 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("mobx"),t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,o=require("react-dom");if(!t.useState)throw new Error("mobx-react-lite requires React with Hooks support");if(!r.makeObservable)throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");function i(e){e()}function u(e){e||(e=i),r.configure({reactionScheduler:e})}function a(e){return r.getDependencyTree(e)}var c="undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry;function s(e){return{reaction:e,mounted:!1,changedBeforeMount:!1,cleanAt:Date.now()+f}}var f=1e4;function l(e){var r=new Map,t=1,n=new e((function(e){var t=r.get(e);t&&(t.reaction.dispose(),r.delete(e))}));return{addReactionToTrack:function(e,o,i){var u=t++;return n.register(i,u,e),e.current=s(o),e.current.finalizationRegistryCleanupToken=u,r.set(u,e.current),e.current},recordReactionAsCommitted:function(e){n.unregister(e),e.current&&e.current.finalizationRegistryCleanupToken&&r.delete(e.current.finalizationRegistryCleanupToken)},forceCleanupTimerToRunNowForTests:function(){},resetCleanupScheduleForTests:function(){}}}function d(){return(d=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}function p(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function v(){var e,r=new Set;function t(){void 0===e&&(e=setTimeout(n,1e4))}function n(){e=void 0;var n=Date.now();r.forEach((function(e){var t=e.current;t&&n>=t.cleanAt&&(t.reaction.dispose(),e.current=null,r.delete(e))})),r.size>0&&t()}return{addReactionToTrack:function(e,n,o){return e.current=s(n),r.add(e),t(),e.current},recordReactionAsCommitted:function(e){r.delete(e)},forceCleanupTimerToRunNowForTests:function(){e&&(clearTimeout(e),n())},resetCleanupScheduleForTests:function(){if(r.size>0){for(var t,n=function(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return p(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?p(e,void 0):void 0}}(e))){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r);!(t=n()).done;){var o=t.value,i=o.current;i&&(i.reaction.dispose(),o.current=null)}r.clear()}e&&(clearTimeout(e),e=void 0)}}}var b=c?l(c):v(),m=b.addReactionToTrack,y=b.recordReactionAsCommitted,g=b.resetCleanupScheduleForTests,h=!1;function T(e){h=e}function w(){return h}function R(e){return"observer"+e}var x=function(){};function S(){return new x}function O(e,t){if(void 0===t&&(t="observed"),w())return e();var o=n.useState(S)[0],i=n.useState()[1],u=function(){return i([])},c=n.useRef(null);if(!c.current)var s=new r.Reaction(R(t),(function(){f.mounted?u():f.changedBeforeMount=!0})),f=m(c,s,o);var l,d,p=c.current.reaction;if(n.useDebugValue(p,a),n.useEffect((function(){return y(c),c.current?(c.current.mounted=!0,c.current.changedBeforeMount&&(c.current.changedBeforeMount=!1,u())):(c.current={reaction:new r.Reaction(R(t),(function(){u()})),mounted:!0,changedBeforeMount:!1,cleanAt:Infinity},u()),function(){c.current.reaction.dispose(),c.current=null}}),[]),p.track((function(){try{l=e()}catch(e){d=e}})),d)throw d;return l}var A={$$typeof:!0,render:!0,compare:!0,type:!0,displayName:!0};function C(e){var r=e.children||e.render;return"function"!=typeof r?null:O(r)}function j(e){var n=t.useState((function(){return r.observable(e,{},{deep:!1})}))[0];return r.runInAction((function(){Object.assign(n,e)})),n}C.displayName="Observer",u(o.unstable_batchedUpdates),exports.Observer=C,exports.clearTimers=g,exports.enableStaticRendering=T,exports.isObserverBatched=function(){return!0},exports.isUsingStaticRendering=w,exports.observer=function(e,r){if(w())return e;var n,o,i,u=d({forwardRef:!1},r),a=e.displayName||e.name,c=function(r,t){return O((function(){return e(r,t)}),a)};return""!==a&&(c.displayName=a),e.contextTypes&&(c.contextTypes=e.contextTypes),n=t.memo(u.forwardRef?t.forwardRef(c):c),o=e,i=n,Object.keys(o).forEach((function(e){A[e]||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(o,e))})),n},exports.observerBatching=u,exports.useAsObservableSource=j,exports.useLocalObservable=function(e,n){return t.useState((function(){return r.observable(e(),n,{autoBind:!0})}))[0]},exports.useLocalStore=function(e,n){var o=n&&j(n);return t.useState((function(){return r.observable(e(o),void 0,{autoBind:!0})}))[0]},exports.useObserver=function(e,r){return void 0===r&&(r="observed"),O(e,r)},exports.useStaticRendering=function(e){T(e)};
+//# sourceMappingURL=mobxreactlite.cjs.production.min.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js.map
new file mode 100644
index 0000000..ea27b22
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.cjs.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.cjs.production.min.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useAsObservableSource.ts","../src/index.ts","../src/useLocalObservable.ts","../src/useLocalStore.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","configure","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","reactionCleanupHandle","uncommittedReactionRefs","Set","ensureCleanupTimerRunning","setTimeout","cleanUncommittedReactions","forEach","ref","tracking","size","add","clearTimeout","clear","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","trackingData","rendering","exception","useDebugValue","useEffect","Infinity","track","e","hoistBlackList","$$typeof","render","compare","type","displayName","ObserverComponent","component","children","useAsObservableSource","res","observable","deep","runInAction","Object","assign","batch","baseComponent","options","memoComponent","base","target","realOptions","forwardRef","name","wrappedComponent","props","contextTypes","memo","keys","key","defineProperty","getOwnPropertyDescriptor","initializer","annotations","autoBind","source","useObserverOriginal"],"mappings":"6LAGA,IAAKA,iBACK,IAAIC,MAAM,qDAEpB,IAAKC,uBACK,IAAID,MAAM,+ECLJE,EAAiBC,GAC7BA,aAGYC,EAAiBC,GACxBA,IACDA,EAAoBH,GAOxBI,YAAU,CAAED,kBAAAA,aCbAE,EAAgBC,UACrBC,oBAAkBD,GCK7B,IAAME,EAC8B,oBAAzBC,0BAAuCC,EAAYD,8BCP9CE,EAAmBC,SACS,CACpCA,SAAAA,EACAC,SAAS,EACTC,oBAAoB,EACpBC,QAASC,KAAKC,MAAQC,GA2DvB,IAAMA,EAAwC,aCvDrCC,EACZV,OAEMW,EAAoC,IAAIC,IAC1CC,EAA6B,EAE3BC,EAAW,IAAId,GAAqB,SAAyBe,OACzDC,EAAkBL,EAAkCM,IAAIF,GAC1DC,IACAA,EAAgBb,SAASe,UACzBP,SAAyCI,aAI1C,CACHI,4BACIC,EACAjB,EACAkB,OAEMN,EAAQF,WAEdC,EAASQ,SAASD,EAAuBN,EAAOK,GAChDA,EAAoBG,QAAUrB,EAAmBC,GACjDiB,EAAoBG,QAAQC,iCAAmCT,EAC/DJ,EAAkCc,IAAIV,EAAOK,EAAoBG,SAE1DH,EAAoBG,SAE/BG,mCAA0BC,GACtBb,EAASc,WAAWD,GAEhBA,EAAYJ,SAAWI,EAAYJ,QAAQC,kCAC3Cb,SACIgB,EAAYJ,QAAQC,mCAIhCK,+CAGAC,oWCzCR,SAAgBC,QASRC,EALEC,EAAiF,IAAIC,aAuClFC,SACyBlC,IAA1B+B,IACAA,EAAwBI,WAAWC,EFeN,eEM5BA,IACLL,OAAwB/B,MAKlBO,EAAMD,KAAKC,MACjByB,EAAwBK,SAAQ,SAAAC,OACtBC,EAAWD,EAAIhB,QACjBiB,GACIhC,GAAOgC,EAASlC,UAEhBkC,EAASrC,SAASe,UAClBqB,EAAIhB,QAAU,KACdU,SAA+BM,OAKvCN,EAAwBQ,KAAO,GAG/BN,UAID,CACHhB,4BACIC,EACAjB,EAKAkB,UAEAD,EAAoBG,QAAUrB,EAAmBC,GAlDrD8B,EAAwBS,IAmDctB,GAjDtCe,IAkDWf,EAAoBG,SAE/BG,mCAhDAC,GAEAM,SAA+BN,IA+C/BE,6CAzFIG,IACAW,aAAaX,GACbK,MAwFJP,2CAlFIG,EAAwBQ,KAAO,EAAG,isBAChBR,kBAAyB,KAAhCM,UACDC,EAAWD,EAAIhB,QACjBiB,IACAA,EAASrC,SAASe,UAClBqB,EAAIhB,QAAU,MAGtBU,EAAwBW,QAGxBZ,IACAW,aAAaX,GACbA,OAAwB/B,WCxChC4C,EACEnC,EAAuDmC,GACvDd,IANFZ,IAAAA,mBACAO,IAAAA,0BACAI,IAAAA,6BCRAgB,GAA+B,WAEnBC,EAAsBC,GAClCF,EAA+BE,EAGnC,SAAgBC,WACLH,ECGX,SAASI,EAAyBC,oBACZA,MAMhBC,eAEN,SAASC,WACE,IAAID,WAGCE,EAAeC,EAAaJ,eAAAA,IAAAA,EAA4B,YAChEF,WACOM,QAGJlC,EAAyBmC,EAAMpE,SAASiE,MAEtCI,EAAYD,EAAMpE,cACrBsE,EAAc,kBAAMD,EAAS,KAK7BrC,EAAsBoC,EAAMG,OAAiC,UAE9DvC,EAAoBG,YAIfqC,EAAc,IAAIC,WAASX,EAAyBC,IAAoB,WAMtEW,EAAa1D,QAEbsD,IAIAI,EAAazD,oBAAqB,KAIpCyD,EAAe3C,EACjBC,EACAwC,EACAvC,OAiDJ0C,EACAC,EA9CI7D,EAAaiB,EAAoBG,QAAjCpB,YACRqD,EAAMS,cAAc9D,EAAUP,GAE9B4D,EAAMU,WAAU,kBAEZxC,EAA0BN,GAEtBA,EAAoBG,SAIpBH,EAAoBG,QAAQnB,SAAU,EAElCgB,EAAoBG,QAAQlB,qBAC5Be,EAAoBG,QAAQlB,oBAAqB,EACjDqD,OASJtC,EAAoBG,QAAU,CAC1BpB,SAAU,IAAI0D,WAASX,EAAyBC,IAAoB,WAEhEO,OAEJtD,SAAS,EACTC,oBAAoB,EACpBC,QAAS6D,UAEbT,KAGG,WACHtC,EAAoBG,QAASpB,SAASe,UACtCE,EAAoBG,QAAU,QAEnC,IAOHpB,EAASiE,OAAM,eAEPL,EAAYR,IACd,MAAOc,GACLL,EAAYK,MAIhBL,QACMA,SAGHD,ECtBX,IAAMO,EAAsB,CACxBC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,MAAM,EAGNC,aAAa,GCtGjB,SAASC,SACCC,IADmBC,YAAUN,aAEV,mBAAdK,EACA,KAEJvB,EAAYuB,YCRPE,EAA8CxD,OAKnDyD,EAAO5F,YAAS,kBAAM6F,aAAW1D,EAAS,GAAI,CAAE2D,MAAM,iBAC7DC,eAAY,WACRC,OAAOC,OAAOL,EAAKzD,MAEhByD,EDOXJ,EAAkBD,YAAc,WEZhClF,EAAiB6F,8HZUgB,kBAKtB,8DSiBPC,EACAC,MAGIvC,WACOsC,MA4BPE,EAuCsBC,EAAWC,EAhE/BC,KACFC,YAAY,GACTL,GAGDrC,EAAoBoC,EAAcZ,aAAeY,EAAcO,KAE/DC,EAAmB,SAACC,EAAUzD,UACzBe,GAAY,kBAAMiC,EAAcS,EAAOzD,KAAMY,UAK9B,KAAtBA,IACA4C,EAAiBpB,YAAcxB,GAI9BoC,EAAsBU,eACvBF,EAAiBE,aAAgBV,EAAsBU,cAYvDR,EAAgBS,OALhBN,EAAYC,WAKSA,aAAWE,GAEXA,GA+BCL,EA5BLH,EA4BgBI,EA5BDF,EA6BpCL,OAAOe,KAAKT,GAAMpD,SAAQ,SAAA8D,GACjB9B,EAAe8B,IAChBhB,OAAOiB,eAAeV,EAAQS,EAAKhB,OAAOkB,yBAAyBZ,EAAMU,OAjB1EX,kGI9FPc,EACAC,UAEOpH,YAAS,kBAAM6F,aAAWsB,IAAeC,EAAa,CAAEC,UAAU,OAAS,mCCKlFF,EACAhF,OAMMmF,EAASnF,GAAWwD,EAAsBxD,UACzCnC,YAAS,kBAAM6F,aAAWsB,EAAYG,QAASzG,EAAW,CAAEwG,UAAU,OAAS,iCFF3DlD,EAAaJ,mBAAAA,IAAAA,EAA4B,YAM7DwD,EAAoBpD,EAAIJ,wCAKAH,GAM/BD,EAAsBC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js
new file mode 100644
index 0000000..01f401c
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js
@@ -0,0 +1,582 @@
+import { makeObservable, configure, getDependencyTree, Reaction, observable, runInAction } from 'mobx';
+import React, { useState, memo, forwardRef } from 'react';
+import { unstable_batchedUpdates } from 'react-dom';
+
+if (!useState) {
+  throw new Error("mobx-react-lite requires React with Hooks support");
+}
+
+if (!makeObservable) {
+  throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+}
+
+function defaultNoopBatch(callback) {
+  callback();
+}
+function observerBatching(reactionScheduler) {
+  if (!reactionScheduler) {
+    reactionScheduler = defaultNoopBatch;
+
+    {
+      console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+    }
+  }
+
+  configure({
+    reactionScheduler: reactionScheduler
+  });
+}
+var isObserverBatched = function isObserverBatched() {
+  {
+    console.warn("[MobX] Deprecated");
+  }
+
+  return true;
+};
+
+var deprecatedMessages = [];
+function useDeprecated(msg) {
+  if (!deprecatedMessages.includes(msg)) {
+    deprecatedMessages.push(msg);
+    console.warn(msg);
+  }
+}
+
+function printDebugValue(v) {
+  return getDependencyTree(v);
+}
+
+var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+
+function createTrackingData(reaction) {
+  var trackingData = {
+    reaction: reaction,
+    mounted: false,
+    changedBeforeMount: false,
+    cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+  };
+  return trackingData;
+}
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+
+var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+
+var CLEANUP_TIMER_LOOP_MILLIS = 10000;
+
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+
+function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+  var cleanupTokenToReactionTrackingMap = new Map();
+  var globalCleanupTokensCounter = 1;
+  var registry = new FinalizationRegistry(function cleanupFunction(token) {
+    var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+
+    if (trackedReaction) {
+      trackedReaction.reaction.dispose();
+      cleanupTokenToReactionTrackingMap["delete"](token);
+    }
+  });
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction, objectRetainedByReact) {
+      var token = globalCleanupTokensCounter++;
+      registry.register(objectRetainedByReact, token, reactionTrackingRef);
+      reactionTrackingRef.current = createTrackingData(reaction);
+      reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+      cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: function recordReactionAsCommitted(reactionRef) {
+      registry.unregister(reactionRef);
+
+      if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+        cleanupTokenToReactionTrackingMap["delete"](reactionRef.current.finalizationRegistryCleanupToken);
+      }
+    },
+    forceCleanupTimerToRunNowForTests: function forceCleanupTimerToRunNowForTests() {// When FinalizationRegistry in use, this this is no-op
+    },
+    resetCleanupScheduleForTests: function resetCleanupScheduleForTests() {// When FinalizationRegistry in use, this this is no-op
+    }
+  };
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _unsupportedIterableToArray(o, minLen) {
+  if (!o) return;
+  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+  var n = Object.prototype.toString.call(o).slice(8, -1);
+  if (n === "Object" && o.constructor) n = o.constructor.name;
+  if (n === "Map" || n === "Set") return Array.from(o);
+  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+}
+
+function _arrayLikeToArray(arr, len) {
+  if (len == null || len > arr.length) len = arr.length;
+
+  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+  return arr2;
+}
+
+function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+  if (it) return (it = it.call(o)).next.bind(it);
+
+  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+    if (it) o = it;
+    var i = 0;
+    return function () {
+      if (i >= o.length) return {
+        done: true
+      };
+      return {
+        done: false,
+        value: o[i++]
+      };
+    };
+  }
+
+  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+
+function createTimerBasedReactionCleanupTracking() {
+  /**
+   * Reactions created by components that have yet to be fully mounted.
+   */
+  var uncommittedReactionRefs = new Set();
+  /**
+   * Latest 'uncommitted reactions' cleanup timer handle.
+   */
+
+  var reactionCleanupHandle;
+  /* istanbul ignore next */
+
+  /**
+   * Only to be used by test functions; do not export outside of mobx-react-lite
+   */
+
+  function forceCleanupTimerToRunNowForTests() {
+    // This allows us to control the execution of the cleanup timer
+    // to force it to run at awkward times in unit tests.
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      cleanUncommittedReactions();
+    }
+  }
+  /* istanbul ignore next */
+
+
+  function resetCleanupScheduleForTests() {
+    if (uncommittedReactionRefs.size > 0) {
+      for (var _iterator = _createForOfIteratorHelperLoose(uncommittedReactionRefs), _step; !(_step = _iterator()).done;) {
+        var ref = _step.value;
+        var tracking = ref.current;
+
+        if (tracking) {
+          tracking.reaction.dispose();
+          ref.current = null;
+        }
+      }
+
+      uncommittedReactionRefs.clear();
+    }
+
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      reactionCleanupHandle = undefined;
+    }
+  }
+
+  function ensureCleanupTimerRunning() {
+    if (reactionCleanupHandle === undefined) {
+      reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);
+    }
+  }
+
+  function scheduleCleanupOfReactionIfLeaked(ref) {
+    uncommittedReactionRefs.add(ref);
+    ensureCleanupTimerRunning();
+  }
+
+  function recordReactionAsCommitted(reactionRef) {
+    uncommittedReactionRefs["delete"](reactionRef);
+  }
+  /**
+   * Run by the cleanup timer to dispose any outstanding reactions
+   */
+
+
+  function cleanUncommittedReactions() {
+    reactionCleanupHandle = undefined; // Loop through all the candidate leaked reactions; those older
+    // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+
+    var now = Date.now();
+    uncommittedReactionRefs.forEach(function (ref) {
+      var tracking = ref.current;
+
+      if (tracking) {
+        if (now >= tracking.cleanAt) {
+          // It's time to tidy up this leaked reaction.
+          tracking.reaction.dispose();
+          ref.current = null;
+          uncommittedReactionRefs["delete"](ref);
+        }
+      }
+    });
+
+    if (uncommittedReactionRefs.size > 0) {
+      // We've just finished a round of cleanups but there are still
+      // some leak candidates outstanding.
+      ensureCleanupTimerRunning();
+    }
+  }
+
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction,
+    /**
+     * On timer based implementation we don't really need this object,
+     * but we keep the same api
+     */
+    objectRetainedByReact) {
+      reactionTrackingRef.current = createTrackingData(reaction);
+      scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: recordReactionAsCommitted,
+    forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+    resetCleanupScheduleForTests: resetCleanupScheduleForTests
+  };
+}
+
+var _ref = FinalizationRegistryLocal ? /*#__PURE__*/createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryLocal) : /*#__PURE__*/createTimerBasedReactionCleanupTracking(),
+    addReactionToTrack = _ref.addReactionToTrack,
+    recordReactionAsCommitted = _ref.recordReactionAsCommitted,
+    resetCleanupScheduleForTests = _ref.resetCleanupScheduleForTests;
+
+var globalIsUsingStaticRendering = false;
+function enableStaticRendering(enable) {
+  globalIsUsingStaticRendering = enable;
+}
+function isUsingStaticRendering() {
+  return globalIsUsingStaticRendering;
+}
+
+function observerComponentNameFor(baseComponentName) {
+  return "observer" + baseComponentName;
+}
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+
+
+var ObjectToBeRetainedByReact = function ObjectToBeRetainedByReact() {};
+
+function objectToBeRetainedByReactFactory() {
+  return new ObjectToBeRetainedByReact();
+}
+
+function useObserver(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  if (isUsingStaticRendering()) {
+    return fn();
+  }
+
+  var _React$useState = React.useState(objectToBeRetainedByReactFactory),
+      objectRetainedByReact = _React$useState[0]; // Force update, see #2982
+
+
+  var _React$useState2 = React.useState(),
+      setState = _React$useState2[1];
+
+  var forceUpdate = function forceUpdate() {
+    return setState([]);
+  }; // StrictMode/ConcurrentMode/Suspense may mean that our component is
+  // rendered and abandoned multiple times, so we need to track leaked
+  // Reactions.
+
+
+  var reactionTrackingRef = React.useRef(null);
+
+  if (!reactionTrackingRef.current) {
+    // First render for this component (or first time since a previous
+    // reaction from an abandoned render was disposed).
+    var newReaction = new Reaction(observerComponentNameFor(baseComponentName), function () {
+      // Observable has changed, meaning we want to re-render
+      // BUT if we're a component that hasn't yet got to the useEffect()
+      // stage, we might be a component that _started_ to render, but
+      // got dropped, and we don't want to make state changes then.
+      // (It triggers warnings in StrictMode, for a start.)
+      if (trackingData.mounted) {
+        // We have reached useEffect(), so we're mounted, and can trigger an update
+        forceUpdate();
+      } else {
+        // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+        // when (and if) useEffect() arrives.
+        trackingData.changedBeforeMount = true;
+      }
+    });
+    var trackingData = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
+  }
+
+  var reaction = reactionTrackingRef.current.reaction;
+  React.useDebugValue(reaction, printDebugValue);
+  React.useEffect(function () {
+    // Called on first mount only
+    recordReactionAsCommitted(reactionTrackingRef);
+
+    if (reactionTrackingRef.current) {
+      // Great. We've already got our reaction from our render;
+      // all we need to do is to record that it's now mounted,
+      // to allow future observable changes to trigger re-renders
+      reactionTrackingRef.current.mounted = true; // Got a change before first mount, force an update
+
+      if (reactionTrackingRef.current.changedBeforeMount) {
+        reactionTrackingRef.current.changedBeforeMount = false;
+        forceUpdate();
+      }
+    } else {
+      // The reaction we set up in our render has been disposed.
+      // This can be due to bad timings of renderings, e.g. our
+      // component was paused for a _very_ long time, and our
+      // reaction got cleaned up
+      // Re-create the reaction
+      reactionTrackingRef.current = {
+        reaction: new Reaction(observerComponentNameFor(baseComponentName), function () {
+          // We've definitely already been mounted at this point
+          forceUpdate();
+        }),
+        mounted: true,
+        changedBeforeMount: false,
+        cleanAt: Infinity
+      };
+      forceUpdate();
+    }
+
+    return function () {
+      reactionTrackingRef.current.reaction.dispose();
+      reactionTrackingRef.current = null;
+    };
+  }, []); // render the original component, but have the
+  // reaction track the observables, so that rendering
+  // can be invalidated (see above) once a dependency changes
+
+  var rendering;
+  var exception;
+  reaction.track(function () {
+    try {
+      rendering = fn();
+    } catch (e) {
+      exception = e;
+    }
+  });
+
+  if (exception) {
+    throw exception; // re-throw any exceptions caught during rendering
+  }
+
+  return rendering;
+}
+
+function observer(baseComponent, options) {
+  // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+  if (isUsingStaticRendering()) {
+    return baseComponent;
+  }
+
+  var realOptions = _extends({
+    forwardRef: false
+  }, options);
+
+  var baseComponentName = baseComponent.displayName || baseComponent.name;
+
+  var wrappedComponent = function wrappedComponent(props, ref) {
+    return useObserver(function () {
+      return baseComponent(props, ref);
+    }, baseComponentName);
+  }; // Don't set `displayName` for anonymous components,
+  // so the `displayName` can be customized by user, see #3192.
+
+
+  if (baseComponentName !== "") {
+    wrappedComponent.displayName = baseComponentName;
+  } // Support legacy context: `contextTypes` must be applied before `memo`
+
+
+  if (baseComponent.contextTypes) {
+    wrappedComponent.contextTypes = baseComponent.contextTypes;
+  } // memo; we are not interested in deep updates
+  // in props; we assume that if deep objects are changed,
+  // this is in observables, which would have been tracked anyway
+
+
+  var memoComponent;
+
+  if (realOptions.forwardRef) {
+    // we have to use forwardRef here because:
+    // 1. it cannot go before memo, only after it
+    // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+    //    since it wouldn't be a callable function anymore
+    memoComponent = memo(forwardRef(wrappedComponent));
+  } else {
+    memoComponent = memo(wrappedComponent);
+  }
+
+  copyStaticProperties(baseComponent, memoComponent);
+
+  {
+    Object.defineProperty(memoComponent, "contextTypes", {
+      set: function set() {
+        var _this$type;
+
+        throw new Error("[mobx-react-lite] `" + (this.displayName || ((_this$type = this.type) == null ? void 0 : _this$type.displayName) || "Component") + ".contextTypes` must be set before applying `observer`.");
+      }
+    });
+  }
+
+  return memoComponent;
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+var hoistBlackList = {
+  $$typeof: true,
+  render: true,
+  compare: true,
+  type: true,
+  // Don't redefine `displayName`,
+  // it's defined as getter-setter pair on `memo` (see #3192).
+  displayName: true
+};
+
+function copyStaticProperties(base, target) {
+  Object.keys(base).forEach(function (key) {
+    if (!hoistBlackList[key]) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+
+function ObserverComponent(_ref) {
+  var children = _ref.children,
+      render = _ref.render;
+  var component = children || render;
+
+  if (typeof component !== "function") {
+    return null;
+  }
+
+  return useObserver(component);
+}
+
+{
+  ObserverComponent.propTypes = {
+    children: ObserverPropsCheck,
+    render: ObserverPropsCheck
+  };
+}
+
+ObserverComponent.displayName = "Observer";
+
+function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+  var extraKey = key === "children" ? "render" : "children";
+  var hasProp = typeof props[key] === "function";
+  var hasExtraProp = typeof props[extraKey] === "function";
+
+  if (hasProp && hasExtraProp) {
+    return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+  }
+
+  if (hasProp || hasExtraProp) {
+    return null;
+  }
+
+  return new Error("Invalid prop `" + propFullName + "` of type `" + typeof props[key] + "` supplied to" + " `" + componentName + "`, expected `function`.");
+}
+
+function useLocalObservable(initializer, annotations) {
+  return useState(function () {
+    return observable(initializer(), annotations, {
+      autoBind: true
+    });
+  })[0];
+}
+
+function useAsObservableSource(current) {
+  useDeprecated("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+
+  var _useState = useState(function () {
+    return observable(current, {}, {
+      deep: false
+    });
+  }),
+      res = _useState[0];
+
+  runInAction(function () {
+    Object.assign(res, current);
+  });
+  return res;
+}
+
+function useLocalStore(initializer, current) {
+  useDeprecated("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+  var source = current && useAsObservableSource(current);
+  return useState(function () {
+    return observable(initializer(source), undefined, {
+      autoBind: true
+    });
+  })[0];
+}
+
+observerBatching(unstable_batchedUpdates);
+function useObserver$1(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  {
+    useDeprecated("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+  }
+
+  return useObserver(fn, baseComponentName);
+}
+function useStaticRendering(enable) {
+  {
+    console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+  }
+
+  enableStaticRendering(enable);
+}
+
+export { ObserverComponent as Observer, resetCleanupScheduleForTests as clearTimers, enableStaticRendering, isObserverBatched, isUsingStaticRendering, observer, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver$1 as useObserver, useStaticRendering };
+//# sourceMappingURL=mobxreactlite.esm.development.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js.map
new file mode 100644
index 0000000..125654b
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.esm.development.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/utils.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useLocalObservable.ts","../src/useAsObservableSource.ts","../src/useLocalStore.ts","../src/index.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","const deprecatedMessages: string[] = []\n\nexport function useDeprecated(msg: string) {\n    if (!deprecatedMessages.includes(msg)) {\n        deprecatedMessages.push(msg)\n        console.warn(msg)\n    }\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","console","warn","configure","isObserverBatched","deprecatedMessages","useDeprecated","msg","includes","push","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","trackingData","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","CLEANUP_TIMER_LOOP_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","cleanupFunction","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","uncommittedReactionRefs","Set","reactionCleanupHandle","clearTimeout","cleanUncommittedReactions","size","ref","tracking","clear","ensureCleanupTimerRunning","setTimeout","scheduleCleanupOfReactionIfLeaked","add","forEach","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","useDebugValue","useEffect","Infinity","rendering","exception","track","e","observer","baseComponent","options","realOptions","forwardRef","displayName","name","wrappedComponent","props","contextTypes","memoComponent","memo","copyStaticProperties","Object","defineProperty","type","hoistBlackList","$$typeof","render","compare","base","target","keys","key","getOwnPropertyDescriptor","ObserverComponent","children","component","propTypes","ObserverPropsCheck","componentName","location","propFullName","extraKey","hasProp","hasExtraProp","useLocalObservable","initializer","annotations","observable","autoBind","useAsObservableSource","deep","res","runInAction","assign","useLocalStore","source","batch","useObserverOriginal","useStaticRendering"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js
new file mode 100644
index 0000000..dd60e91
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js
@@ -0,0 +1,582 @@
+import { makeObservable, configure, getDependencyTree, Reaction, observable, runInAction } from 'mobx';
+import React, { useState, memo, forwardRef } from 'react';
+import { unstable_batchedUpdates } from 'react-dom';
+
+if (!useState) {
+  throw new Error("mobx-react-lite requires React with Hooks support");
+}
+
+if (!makeObservable) {
+  throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+}
+
+function defaultNoopBatch(callback) {
+  callback();
+}
+function observerBatching(reactionScheduler) {
+  if (!reactionScheduler) {
+    reactionScheduler = defaultNoopBatch;
+
+    if ("production" !== process.env.NODE_ENV) {
+      console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+    }
+  }
+
+  configure({
+    reactionScheduler: reactionScheduler
+  });
+}
+var isObserverBatched = function isObserverBatched() {
+  if ("production" !== process.env.NODE_ENV) {
+    console.warn("[MobX] Deprecated");
+  }
+
+  return true;
+};
+
+var deprecatedMessages = [];
+function useDeprecated(msg) {
+  if (!deprecatedMessages.includes(msg)) {
+    deprecatedMessages.push(msg);
+    console.warn(msg);
+  }
+}
+
+function printDebugValue(v) {
+  return getDependencyTree(v);
+}
+
+var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+
+function createTrackingData(reaction) {
+  var trackingData = {
+    reaction: reaction,
+    mounted: false,
+    changedBeforeMount: false,
+    cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+  };
+  return trackingData;
+}
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+
+var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+
+var CLEANUP_TIMER_LOOP_MILLIS = 10000;
+
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+
+function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+  var cleanupTokenToReactionTrackingMap = new Map();
+  var globalCleanupTokensCounter = 1;
+  var registry = new FinalizationRegistry(function cleanupFunction(token) {
+    var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+
+    if (trackedReaction) {
+      trackedReaction.reaction.dispose();
+      cleanupTokenToReactionTrackingMap["delete"](token);
+    }
+  });
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction, objectRetainedByReact) {
+      var token = globalCleanupTokensCounter++;
+      registry.register(objectRetainedByReact, token, reactionTrackingRef);
+      reactionTrackingRef.current = createTrackingData(reaction);
+      reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+      cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: function recordReactionAsCommitted(reactionRef) {
+      registry.unregister(reactionRef);
+
+      if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+        cleanupTokenToReactionTrackingMap["delete"](reactionRef.current.finalizationRegistryCleanupToken);
+      }
+    },
+    forceCleanupTimerToRunNowForTests: function forceCleanupTimerToRunNowForTests() {// When FinalizationRegistry in use, this this is no-op
+    },
+    resetCleanupScheduleForTests: function resetCleanupScheduleForTests() {// When FinalizationRegistry in use, this this is no-op
+    }
+  };
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _unsupportedIterableToArray(o, minLen) {
+  if (!o) return;
+  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+  var n = Object.prototype.toString.call(o).slice(8, -1);
+  if (n === "Object" && o.constructor) n = o.constructor.name;
+  if (n === "Map" || n === "Set") return Array.from(o);
+  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+}
+
+function _arrayLikeToArray(arr, len) {
+  if (len == null || len > arr.length) len = arr.length;
+
+  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+  return arr2;
+}
+
+function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+  if (it) return (it = it.call(o)).next.bind(it);
+
+  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+    if (it) o = it;
+    var i = 0;
+    return function () {
+      if (i >= o.length) return {
+        done: true
+      };
+      return {
+        done: false,
+        value: o[i++]
+      };
+    };
+  }
+
+  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+
+function createTimerBasedReactionCleanupTracking() {
+  /**
+   * Reactions created by components that have yet to be fully mounted.
+   */
+  var uncommittedReactionRefs = new Set();
+  /**
+   * Latest 'uncommitted reactions' cleanup timer handle.
+   */
+
+  var reactionCleanupHandle;
+  /* istanbul ignore next */
+
+  /**
+   * Only to be used by test functions; do not export outside of mobx-react-lite
+   */
+
+  function forceCleanupTimerToRunNowForTests() {
+    // This allows us to control the execution of the cleanup timer
+    // to force it to run at awkward times in unit tests.
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      cleanUncommittedReactions();
+    }
+  }
+  /* istanbul ignore next */
+
+
+  function resetCleanupScheduleForTests() {
+    if (uncommittedReactionRefs.size > 0) {
+      for (var _iterator = _createForOfIteratorHelperLoose(uncommittedReactionRefs), _step; !(_step = _iterator()).done;) {
+        var ref = _step.value;
+        var tracking = ref.current;
+
+        if (tracking) {
+          tracking.reaction.dispose();
+          ref.current = null;
+        }
+      }
+
+      uncommittedReactionRefs.clear();
+    }
+
+    if (reactionCleanupHandle) {
+      clearTimeout(reactionCleanupHandle);
+      reactionCleanupHandle = undefined;
+    }
+  }
+
+  function ensureCleanupTimerRunning() {
+    if (reactionCleanupHandle === undefined) {
+      reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);
+    }
+  }
+
+  function scheduleCleanupOfReactionIfLeaked(ref) {
+    uncommittedReactionRefs.add(ref);
+    ensureCleanupTimerRunning();
+  }
+
+  function recordReactionAsCommitted(reactionRef) {
+    uncommittedReactionRefs["delete"](reactionRef);
+  }
+  /**
+   * Run by the cleanup timer to dispose any outstanding reactions
+   */
+
+
+  function cleanUncommittedReactions() {
+    reactionCleanupHandle = undefined; // Loop through all the candidate leaked reactions; those older
+    // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+
+    var now = Date.now();
+    uncommittedReactionRefs.forEach(function (ref) {
+      var tracking = ref.current;
+
+      if (tracking) {
+        if (now >= tracking.cleanAt) {
+          // It's time to tidy up this leaked reaction.
+          tracking.reaction.dispose();
+          ref.current = null;
+          uncommittedReactionRefs["delete"](ref);
+        }
+      }
+    });
+
+    if (uncommittedReactionRefs.size > 0) {
+      // We've just finished a round of cleanups but there are still
+      // some leak candidates outstanding.
+      ensureCleanupTimerRunning();
+    }
+  }
+
+  return {
+    addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction,
+    /**
+     * On timer based implementation we don't really need this object,
+     * but we keep the same api
+     */
+    objectRetainedByReact) {
+      reactionTrackingRef.current = createTrackingData(reaction);
+      scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+      return reactionTrackingRef.current;
+    },
+    recordReactionAsCommitted: recordReactionAsCommitted,
+    forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+    resetCleanupScheduleForTests: resetCleanupScheduleForTests
+  };
+}
+
+var _ref = FinalizationRegistryLocal ? /*#__PURE__*/createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryLocal) : /*#__PURE__*/createTimerBasedReactionCleanupTracking(),
+    addReactionToTrack = _ref.addReactionToTrack,
+    recordReactionAsCommitted = _ref.recordReactionAsCommitted,
+    resetCleanupScheduleForTests = _ref.resetCleanupScheduleForTests;
+
+var globalIsUsingStaticRendering = false;
+function enableStaticRendering(enable) {
+  globalIsUsingStaticRendering = enable;
+}
+function isUsingStaticRendering() {
+  return globalIsUsingStaticRendering;
+}
+
+function observerComponentNameFor(baseComponentName) {
+  return "observer" + baseComponentName;
+}
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+
+
+var ObjectToBeRetainedByReact = function ObjectToBeRetainedByReact() {};
+
+function objectToBeRetainedByReactFactory() {
+  return new ObjectToBeRetainedByReact();
+}
+
+function useObserver(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  if (isUsingStaticRendering()) {
+    return fn();
+  }
+
+  var _React$useState = React.useState(objectToBeRetainedByReactFactory),
+      objectRetainedByReact = _React$useState[0]; // Force update, see #2982
+
+
+  var _React$useState2 = React.useState(),
+      setState = _React$useState2[1];
+
+  var forceUpdate = function forceUpdate() {
+    return setState([]);
+  }; // StrictMode/ConcurrentMode/Suspense may mean that our component is
+  // rendered and abandoned multiple times, so we need to track leaked
+  // Reactions.
+
+
+  var reactionTrackingRef = React.useRef(null);
+
+  if (!reactionTrackingRef.current) {
+    // First render for this component (or first time since a previous
+    // reaction from an abandoned render was disposed).
+    var newReaction = new Reaction(observerComponentNameFor(baseComponentName), function () {
+      // Observable has changed, meaning we want to re-render
+      // BUT if we're a component that hasn't yet got to the useEffect()
+      // stage, we might be a component that _started_ to render, but
+      // got dropped, and we don't want to make state changes then.
+      // (It triggers warnings in StrictMode, for a start.)
+      if (trackingData.mounted) {
+        // We have reached useEffect(), so we're mounted, and can trigger an update
+        forceUpdate();
+      } else {
+        // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+        // when (and if) useEffect() arrives.
+        trackingData.changedBeforeMount = true;
+      }
+    });
+    var trackingData = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
+  }
+
+  var reaction = reactionTrackingRef.current.reaction;
+  React.useDebugValue(reaction, printDebugValue);
+  React.useEffect(function () {
+    // Called on first mount only
+    recordReactionAsCommitted(reactionTrackingRef);
+
+    if (reactionTrackingRef.current) {
+      // Great. We've already got our reaction from our render;
+      // all we need to do is to record that it's now mounted,
+      // to allow future observable changes to trigger re-renders
+      reactionTrackingRef.current.mounted = true; // Got a change before first mount, force an update
+
+      if (reactionTrackingRef.current.changedBeforeMount) {
+        reactionTrackingRef.current.changedBeforeMount = false;
+        forceUpdate();
+      }
+    } else {
+      // The reaction we set up in our render has been disposed.
+      // This can be due to bad timings of renderings, e.g. our
+      // component was paused for a _very_ long time, and our
+      // reaction got cleaned up
+      // Re-create the reaction
+      reactionTrackingRef.current = {
+        reaction: new Reaction(observerComponentNameFor(baseComponentName), function () {
+          // We've definitely already been mounted at this point
+          forceUpdate();
+        }),
+        mounted: true,
+        changedBeforeMount: false,
+        cleanAt: Infinity
+      };
+      forceUpdate();
+    }
+
+    return function () {
+      reactionTrackingRef.current.reaction.dispose();
+      reactionTrackingRef.current = null;
+    };
+  }, []); // render the original component, but have the
+  // reaction track the observables, so that rendering
+  // can be invalidated (see above) once a dependency changes
+
+  var rendering;
+  var exception;
+  reaction.track(function () {
+    try {
+      rendering = fn();
+    } catch (e) {
+      exception = e;
+    }
+  });
+
+  if (exception) {
+    throw exception; // re-throw any exceptions caught during rendering
+  }
+
+  return rendering;
+}
+
+function observer(baseComponent, options) {
+  // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+  if (isUsingStaticRendering()) {
+    return baseComponent;
+  }
+
+  var realOptions = _extends({
+    forwardRef: false
+  }, options);
+
+  var baseComponentName = baseComponent.displayName || baseComponent.name;
+
+  var wrappedComponent = function wrappedComponent(props, ref) {
+    return useObserver(function () {
+      return baseComponent(props, ref);
+    }, baseComponentName);
+  }; // Don't set `displayName` for anonymous components,
+  // so the `displayName` can be customized by user, see #3192.
+
+
+  if (baseComponentName !== "") {
+    wrappedComponent.displayName = baseComponentName;
+  } // Support legacy context: `contextTypes` must be applied before `memo`
+
+
+  if (baseComponent.contextTypes) {
+    wrappedComponent.contextTypes = baseComponent.contextTypes;
+  } // memo; we are not interested in deep updates
+  // in props; we assume that if deep objects are changed,
+  // this is in observables, which would have been tracked anyway
+
+
+  var memoComponent;
+
+  if (realOptions.forwardRef) {
+    // we have to use forwardRef here because:
+    // 1. it cannot go before memo, only after it
+    // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+    //    since it wouldn't be a callable function anymore
+    memoComponent = memo(forwardRef(wrappedComponent));
+  } else {
+    memoComponent = memo(wrappedComponent);
+  }
+
+  copyStaticProperties(baseComponent, memoComponent);
+
+  if ("production" !== process.env.NODE_ENV) {
+    Object.defineProperty(memoComponent, "contextTypes", {
+      set: function set() {
+        var _this$type;
+
+        throw new Error("[mobx-react-lite] `" + (this.displayName || ((_this$type = this.type) == null ? void 0 : _this$type.displayName) || "Component") + ".contextTypes` must be set before applying `observer`.");
+      }
+    });
+  }
+
+  return memoComponent;
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+var hoistBlackList = {
+  $$typeof: true,
+  render: true,
+  compare: true,
+  type: true,
+  // Don't redefine `displayName`,
+  // it's defined as getter-setter pair on `memo` (see #3192).
+  displayName: true
+};
+
+function copyStaticProperties(base, target) {
+  Object.keys(base).forEach(function (key) {
+    if (!hoistBlackList[key]) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+
+function ObserverComponent(_ref) {
+  var children = _ref.children,
+      render = _ref.render;
+  var component = children || render;
+
+  if (typeof component !== "function") {
+    return null;
+  }
+
+  return useObserver(component);
+}
+
+if ("production" !== process.env.NODE_ENV) {
+  ObserverComponent.propTypes = {
+    children: ObserverPropsCheck,
+    render: ObserverPropsCheck
+  };
+}
+
+ObserverComponent.displayName = "Observer";
+
+function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+  var extraKey = key === "children" ? "render" : "children";
+  var hasProp = typeof props[key] === "function";
+  var hasExtraProp = typeof props[extraKey] === "function";
+
+  if (hasProp && hasExtraProp) {
+    return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+  }
+
+  if (hasProp || hasExtraProp) {
+    return null;
+  }
+
+  return new Error("Invalid prop `" + propFullName + "` of type `" + typeof props[key] + "` supplied to" + " `" + componentName + "`, expected `function`.");
+}
+
+function useLocalObservable(initializer, annotations) {
+  return useState(function () {
+    return observable(initializer(), annotations, {
+      autoBind: true
+    });
+  })[0];
+}
+
+function useAsObservableSource(current) {
+  if ("production" !== process.env.NODE_ENV) useDeprecated("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+
+  var _useState = useState(function () {
+    return observable(current, {}, {
+      deep: false
+    });
+  }),
+      res = _useState[0];
+
+  runInAction(function () {
+    Object.assign(res, current);
+  });
+  return res;
+}
+
+function useLocalStore(initializer, current) {
+  if ("production" !== process.env.NODE_ENV) useDeprecated("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+  var source = current && useAsObservableSource(current);
+  return useState(function () {
+    return observable(initializer(source), undefined, {
+      autoBind: true
+    });
+  })[0];
+}
+
+observerBatching(unstable_batchedUpdates);
+function useObserver$1(fn, baseComponentName) {
+  if (baseComponentName === void 0) {
+    baseComponentName = "observed";
+  }
+
+  if ("production" !== process.env.NODE_ENV) {
+    useDeprecated("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+  }
+
+  return useObserver(fn, baseComponentName);
+}
+function useStaticRendering(enable) {
+  if ("production" !== process.env.NODE_ENV) {
+    console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+  }
+
+  enableStaticRendering(enable);
+}
+
+export { ObserverComponent as Observer, resetCleanupScheduleForTests as clearTimers, enableStaticRendering, isObserverBatched, isUsingStaticRendering, observer, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver$1 as useObserver, useStaticRendering };
+//# sourceMappingURL=mobxreactlite.esm.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js.map
new file mode 100644
index 0000000..7a5142e
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.esm.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/utils.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useLocalObservable.ts","../src/useAsObservableSource.ts","../src/useLocalStore.ts","../src/index.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","const deprecatedMessages: string[] = []\n\nexport function useDeprecated(msg: string) {\n    if (!deprecatedMessages.includes(msg)) {\n        deprecatedMessages.push(msg)\n        console.warn(msg)\n    }\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","process","env","NODE_ENV","console","warn","configure","isObserverBatched","deprecatedMessages","useDeprecated","msg","includes","push","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","trackingData","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","CLEANUP_TIMER_LOOP_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","cleanupFunction","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","uncommittedReactionRefs","Set","reactionCleanupHandle","clearTimeout","cleanUncommittedReactions","size","ref","tracking","clear","ensureCleanupTimerRunning","setTimeout","scheduleCleanupOfReactionIfLeaked","add","forEach","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","useDebugValue","useEffect","Infinity","rendering","exception","track","e","observer","baseComponent","options","realOptions","forwardRef","displayName","name","wrappedComponent","props","contextTypes","memoComponent","memo","copyStaticProperties","Object","defineProperty","type","hoistBlackList","$$typeof","render","compare","base","target","keys","key","getOwnPropertyDescriptor","ObserverComponent","children","component","propTypes","ObserverPropsCheck","componentName","location","propFullName","extraKey","hasProp","hasExtraProp","useLocalObservable","initializer","annotations","observable","autoBind","useAsObservableSource","deep","res","runInAction","assign","useLocalStore","source","batch","useObserverOriginal","useStaticRendering"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js
new file mode 100644
index 0000000..0b039cb
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js
@@ -0,0 +1,2 @@
+import{makeObservable as e,configure as r,getDependencyTree as n,Reaction as t,observable as o,runInAction as i}from"mobx";import u,{useState as c,memo as a,forwardRef as f}from"react";import{unstable_batchedUpdates as s}from"react-dom";if(!c)throw new Error("mobx-react-lite requires React with Hooks support");if(!e)throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");function d(e){e()}function l(e){e||(e=d),r({reactionScheduler:e})}var v=function(){return!0};function p(e){return n(e)}var m="undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry;function y(e){return{reaction:e,mounted:!1,changedBeforeMount:!1,cleanAt:Date.now()+b}}var b=1e4;function h(e){var r=new Map,n=1,t=new e((function(e){var n=r.get(e);n&&(n.reaction.dispose(),r.delete(e))}));return{addReactionToTrack:function(e,o,i){var u=n++;return t.register(i,u,e),e.current=y(o),e.current.finalizationRegistryCleanupToken=u,r.set(u,e.current),e.current},recordReactionAsCommitted:function(e){t.unregister(e),e.current&&e.current.finalizationRegistryCleanupToken&&r.delete(e.current.finalizationRegistryCleanupToken)},forceCleanupTimerToRunNowForTests:function(){},resetCleanupScheduleForTests:function(){}}}function T(){return(T=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e}).apply(this,arguments)}function g(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}function w(){var e,r=new Set;function n(){void 0===e&&(e=setTimeout(t,1e4))}function t(){e=void 0;var t=Date.now();r.forEach((function(e){var n=e.current;n&&t>=n.cleanAt&&(n.reaction.dispose(),e.current=null,r.delete(e))})),r.size>0&&n()}return{addReactionToTrack:function(e,t,o){return e.current=y(t),r.add(e),n(),e.current},recordReactionAsCommitted:function(e){r.delete(e)},forceCleanupTimerToRunNowForTests:function(){e&&(clearTimeout(e),t())},resetCleanupScheduleForTests:function(){if(r.size>0){for(var n,t=function(e,r){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,r){if(e){if("string"==typeof e)return g(e,void 0);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,void 0):void 0}}(e))){n&&(e=n);var t=0;return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r);!(n=t()).done;){var o=n.value,i=o.current;i&&(i.reaction.dispose(),o.current=null)}r.clear()}e&&(clearTimeout(e),e=void 0)}}}var R=m?h(m):w(),O=R.addReactionToTrack,A=R.recordReactionAsCommitted,C=R.resetCleanupScheduleForTests,S=!1;function j(e){S=e}function k(){return S}function x(e){return"observer"+e}var z=function(){};function B(){return new z}function F(e,r){if(void 0===r&&(r="observed"),k())return e();var n=u.useState(B)[0],o=u.useState()[1],i=function(){return o([])},c=u.useRef(null);if(!c.current)var a=new t(x(r),(function(){f.mounted?i():f.changedBeforeMount=!0})),f=O(c,a,n);var s,d,l=c.current.reaction;if(u.useDebugValue(l,p),u.useEffect((function(){return A(c),c.current?(c.current.mounted=!0,c.current.changedBeforeMount&&(c.current.changedBeforeMount=!1,i())):(c.current={reaction:new t(x(r),(function(){i()})),mounted:!0,changedBeforeMount:!1,cleanAt:Infinity},i()),function(){c.current.reaction.dispose(),c.current=null}}),[]),l.track((function(){try{s=e()}catch(e){d=e}})),d)throw d;return s}function M(e,r){if(k())return e;var n,t,o,i=T({forwardRef:!1},r),u=e.displayName||e.name,c=function(r,n){return F((function(){return e(r,n)}),u)};return""!==u&&(c.displayName=u),e.contextTypes&&(c.contextTypes=e.contextTypes),n=a(i.forwardRef?f(c):c),t=e,o=n,Object.keys(t).forEach((function(e){E[e]||Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(t,e))})),n}var E={$$typeof:!0,render:!0,compare:!0,type:!0,displayName:!0};function N(e){var r=e.children||e.render;return"function"!=typeof r?null:F(r)}function D(e,r){return c((function(){return o(e(),r,{autoBind:!0})}))[0]}function I(e){var r=c((function(){return o(e,{},{deep:!1})}))[0];return i((function(){Object.assign(r,e)})),r}function P(e,r){var n=r&&I(r);return c((function(){return o(e(n),void 0,{autoBind:!0})}))[0]}function $(e,r){return void 0===r&&(r="observed"),F(e,r)}function q(e){j(e)}N.displayName="Observer",l(s);export{N as Observer,C as clearTimers,j as enableStaticRendering,v as isObserverBatched,k as isUsingStaticRendering,M as observer,l as observerBatching,I as useAsObservableSource,D as useLocalObservable,P as useLocalStore,$ as useObserver,q as useStaticRendering};
+//# sourceMappingURL=mobxreactlite.esm.production.min.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js.map
new file mode 100644
index 0000000..a05fd26
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.esm.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.esm.production.min.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useLocalObservable.ts","../src/useAsObservableSource.ts","../src/useLocalStore.ts","../src/index.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","configure","isObserverBatched","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","reactionCleanupHandle","uncommittedReactionRefs","Set","ensureCleanupTimerRunning","setTimeout","cleanUncommittedReactions","forEach","ref","tracking","size","add","clearTimeout","clear","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","trackingData","rendering","exception","useDebugValue","useEffect","Infinity","track","e","observer","baseComponent","options","memoComponent","base","target","realOptions","forwardRef","displayName","name","wrappedComponent","props","contextTypes","memo","Object","keys","key","hoistBlackList","defineProperty","getOwnPropertyDescriptor","$$typeof","render","compare","type","ObserverComponent","component","children","useLocalObservable","initializer","annotations","observable","autoBind","useAsObservableSource","res","deep","runInAction","assign","useLocalStore","source","useObserverOriginal","useStaticRendering","batch"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js
new file mode 100644
index 0000000..d2f3539
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js
@@ -0,0 +1,601 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('mobx'), require('react'), require('react-dom')) :
+    typeof define === 'function' && define.amd ? define(['exports', 'mobx', 'react', 'react-dom'], factory) :
+    (global = global || self, factory(global.mobxReactLite = {}, global.mobx, global.React, global.ReactDOM));
+}(this, (function (exports, mobx, React, reactDom) { 'use strict';
+
+    var React__default = 'default' in React ? React['default'] : React;
+
+    if (!React.useState) {
+      throw new Error("mobx-react-lite requires React with Hooks support");
+    }
+
+    if (!mobx.makeObservable) {
+      throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+    }
+
+    function defaultNoopBatch(callback) {
+      callback();
+    }
+    function observerBatching(reactionScheduler) {
+      if (!reactionScheduler) {
+        reactionScheduler = defaultNoopBatch;
+
+        {
+          console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+        }
+      }
+
+      mobx.configure({
+        reactionScheduler: reactionScheduler
+      });
+    }
+    var isObserverBatched = function isObserverBatched() {
+      {
+        console.warn("[MobX] Deprecated");
+      }
+
+      return true;
+    };
+
+    var deprecatedMessages = [];
+    function useDeprecated(msg) {
+      if (!deprecatedMessages.includes(msg)) {
+        deprecatedMessages.push(msg);
+        console.warn(msg);
+      }
+    }
+
+    function printDebugValue(v) {
+      return mobx.getDependencyTree(v);
+    }
+
+    var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+
+    function createTrackingData(reaction) {
+      var trackingData = {
+        reaction: reaction,
+        mounted: false,
+        changedBeforeMount: false,
+        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+      };
+      return trackingData;
+    }
+    /**
+     * The minimum time before we'll clean up a Reaction created in a render
+     * for a component that hasn't managed to run its effects. This needs to
+     * be big enough to ensure that a component won't turn up and have its
+     * effects run without being re-rendered.
+     */
+
+    var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+    /**
+     * The frequency with which we'll check for leaked reactions.
+     */
+
+    var CLEANUP_TIMER_LOOP_MILLIS = 10000;
+
+    /**
+     * FinalizationRegistry-based uncommitted reaction cleanup
+     */
+
+    function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+      var cleanupTokenToReactionTrackingMap = new Map();
+      var globalCleanupTokensCounter = 1;
+      var registry = new FinalizationRegistry(function cleanupFunction(token) {
+        var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+
+        if (trackedReaction) {
+          trackedReaction.reaction.dispose();
+          cleanupTokenToReactionTrackingMap["delete"](token);
+        }
+      });
+      return {
+        addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction, objectRetainedByReact) {
+          var token = globalCleanupTokensCounter++;
+          registry.register(objectRetainedByReact, token, reactionTrackingRef);
+          reactionTrackingRef.current = createTrackingData(reaction);
+          reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+          cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+          return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: function recordReactionAsCommitted(reactionRef) {
+          registry.unregister(reactionRef);
+
+          if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+            cleanupTokenToReactionTrackingMap["delete"](reactionRef.current.finalizationRegistryCleanupToken);
+          }
+        },
+        forceCleanupTimerToRunNowForTests: function forceCleanupTimerToRunNowForTests() {// When FinalizationRegistry in use, this this is no-op
+        },
+        resetCleanupScheduleForTests: function resetCleanupScheduleForTests() {// When FinalizationRegistry in use, this this is no-op
+        }
+      };
+    }
+
+    function _extends() {
+      _extends = Object.assign || function (target) {
+        for (var i = 1; i < arguments.length; i++) {
+          var source = arguments[i];
+
+          for (var key in source) {
+            if (Object.prototype.hasOwnProperty.call(source, key)) {
+              target[key] = source[key];
+            }
+          }
+        }
+
+        return target;
+      };
+
+      return _extends.apply(this, arguments);
+    }
+
+    function _unsupportedIterableToArray(o, minLen) {
+      if (!o) return;
+      if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+      var n = Object.prototype.toString.call(o).slice(8, -1);
+      if (n === "Object" && o.constructor) n = o.constructor.name;
+      if (n === "Map" || n === "Set") return Array.from(o);
+      if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+    }
+
+    function _arrayLikeToArray(arr, len) {
+      if (len == null || len > arr.length) len = arr.length;
+
+      for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+      return arr2;
+    }
+
+    function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+      var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+      if (it) return (it = it.call(o)).next.bind(it);
+
+      if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+        if (it) o = it;
+        var i = 0;
+        return function () {
+          if (i >= o.length) return {
+            done: true
+          };
+          return {
+            done: false,
+            value: o[i++]
+          };
+        };
+      }
+
+      throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+    }
+
+    /**
+     * timers, gc-style, uncommitted reaction cleanup
+     */
+
+    function createTimerBasedReactionCleanupTracking() {
+      /**
+       * Reactions created by components that have yet to be fully mounted.
+       */
+      var uncommittedReactionRefs = new Set();
+      /**
+       * Latest 'uncommitted reactions' cleanup timer handle.
+       */
+
+      var reactionCleanupHandle;
+      /* istanbul ignore next */
+
+      /**
+       * Only to be used by test functions; do not export outside of mobx-react-lite
+       */
+
+      function forceCleanupTimerToRunNowForTests() {
+        // This allows us to control the execution of the cleanup timer
+        // to force it to run at awkward times in unit tests.
+        if (reactionCleanupHandle) {
+          clearTimeout(reactionCleanupHandle);
+          cleanUncommittedReactions();
+        }
+      }
+      /* istanbul ignore next */
+
+
+      function resetCleanupScheduleForTests() {
+        if (uncommittedReactionRefs.size > 0) {
+          for (var _iterator = _createForOfIteratorHelperLoose(uncommittedReactionRefs), _step; !(_step = _iterator()).done;) {
+            var ref = _step.value;
+            var tracking = ref.current;
+
+            if (tracking) {
+              tracking.reaction.dispose();
+              ref.current = null;
+            }
+          }
+
+          uncommittedReactionRefs.clear();
+        }
+
+        if (reactionCleanupHandle) {
+          clearTimeout(reactionCleanupHandle);
+          reactionCleanupHandle = undefined;
+        }
+      }
+
+      function ensureCleanupTimerRunning() {
+        if (reactionCleanupHandle === undefined) {
+          reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);
+        }
+      }
+
+      function scheduleCleanupOfReactionIfLeaked(ref) {
+        uncommittedReactionRefs.add(ref);
+        ensureCleanupTimerRunning();
+      }
+
+      function recordReactionAsCommitted(reactionRef) {
+        uncommittedReactionRefs["delete"](reactionRef);
+      }
+      /**
+       * Run by the cleanup timer to dispose any outstanding reactions
+       */
+
+
+      function cleanUncommittedReactions() {
+        reactionCleanupHandle = undefined; // Loop through all the candidate leaked reactions; those older
+        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+
+        var now = Date.now();
+        uncommittedReactionRefs.forEach(function (ref) {
+          var tracking = ref.current;
+
+          if (tracking) {
+            if (now >= tracking.cleanAt) {
+              // It's time to tidy up this leaked reaction.
+              tracking.reaction.dispose();
+              ref.current = null;
+              uncommittedReactionRefs["delete"](ref);
+            }
+          }
+        });
+
+        if (uncommittedReactionRefs.size > 0) {
+          // We've just finished a round of cleanups but there are still
+          // some leak candidates outstanding.
+          ensureCleanupTimerRunning();
+        }
+      }
+
+      return {
+        addReactionToTrack: function addReactionToTrack(reactionTrackingRef, reaction,
+        /**
+         * On timer based implementation we don't really need this object,
+         * but we keep the same api
+         */
+        objectRetainedByReact) {
+          reactionTrackingRef.current = createTrackingData(reaction);
+          scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+          return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: recordReactionAsCommitted,
+        forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+        resetCleanupScheduleForTests: resetCleanupScheduleForTests
+      };
+    }
+
+    var _ref = FinalizationRegistryLocal ? /*#__PURE__*/createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryLocal) : /*#__PURE__*/createTimerBasedReactionCleanupTracking(),
+        addReactionToTrack = _ref.addReactionToTrack,
+        recordReactionAsCommitted = _ref.recordReactionAsCommitted,
+        resetCleanupScheduleForTests = _ref.resetCleanupScheduleForTests;
+
+    var globalIsUsingStaticRendering = false;
+    function enableStaticRendering(enable) {
+      globalIsUsingStaticRendering = enable;
+    }
+    function isUsingStaticRendering() {
+      return globalIsUsingStaticRendering;
+    }
+
+    function observerComponentNameFor(baseComponentName) {
+      return "observer" + baseComponentName;
+    }
+    /**
+     * We use class to make it easier to detect in heap snapshots by name
+     */
+
+
+    var ObjectToBeRetainedByReact = function ObjectToBeRetainedByReact() {};
+
+    function objectToBeRetainedByReactFactory() {
+      return new ObjectToBeRetainedByReact();
+    }
+
+    function useObserver(fn, baseComponentName) {
+      if (baseComponentName === void 0) {
+        baseComponentName = "observed";
+      }
+
+      if (isUsingStaticRendering()) {
+        return fn();
+      }
+
+      var _React$useState = React__default.useState(objectToBeRetainedByReactFactory),
+          objectRetainedByReact = _React$useState[0]; // Force update, see #2982
+
+
+      var _React$useState2 = React__default.useState(),
+          setState = _React$useState2[1];
+
+      var forceUpdate = function forceUpdate() {
+        return setState([]);
+      }; // StrictMode/ConcurrentMode/Suspense may mean that our component is
+      // rendered and abandoned multiple times, so we need to track leaked
+      // Reactions.
+
+
+      var reactionTrackingRef = React__default.useRef(null);
+
+      if (!reactionTrackingRef.current) {
+        // First render for this component (or first time since a previous
+        // reaction from an abandoned render was disposed).
+        var newReaction = new mobx.Reaction(observerComponentNameFor(baseComponentName), function () {
+          // Observable has changed, meaning we want to re-render
+          // BUT if we're a component that hasn't yet got to the useEffect()
+          // stage, we might be a component that _started_ to render, but
+          // got dropped, and we don't want to make state changes then.
+          // (It triggers warnings in StrictMode, for a start.)
+          if (trackingData.mounted) {
+            // We have reached useEffect(), so we're mounted, and can trigger an update
+            forceUpdate();
+          } else {
+            // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+            // when (and if) useEffect() arrives.
+            trackingData.changedBeforeMount = true;
+          }
+        });
+        var trackingData = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
+      }
+
+      var reaction = reactionTrackingRef.current.reaction;
+      React__default.useDebugValue(reaction, printDebugValue);
+      React__default.useEffect(function () {
+        // Called on first mount only
+        recordReactionAsCommitted(reactionTrackingRef);
+
+        if (reactionTrackingRef.current) {
+          // Great. We've already got our reaction from our render;
+          // all we need to do is to record that it's now mounted,
+          // to allow future observable changes to trigger re-renders
+          reactionTrackingRef.current.mounted = true; // Got a change before first mount, force an update
+
+          if (reactionTrackingRef.current.changedBeforeMount) {
+            reactionTrackingRef.current.changedBeforeMount = false;
+            forceUpdate();
+          }
+        } else {
+          // The reaction we set up in our render has been disposed.
+          // This can be due to bad timings of renderings, e.g. our
+          // component was paused for a _very_ long time, and our
+          // reaction got cleaned up
+          // Re-create the reaction
+          reactionTrackingRef.current = {
+            reaction: new mobx.Reaction(observerComponentNameFor(baseComponentName), function () {
+              // We've definitely already been mounted at this point
+              forceUpdate();
+            }),
+            mounted: true,
+            changedBeforeMount: false,
+            cleanAt: Infinity
+          };
+          forceUpdate();
+        }
+
+        return function () {
+          reactionTrackingRef.current.reaction.dispose();
+          reactionTrackingRef.current = null;
+        };
+      }, []); // render the original component, but have the
+      // reaction track the observables, so that rendering
+      // can be invalidated (see above) once a dependency changes
+
+      var rendering;
+      var exception;
+      reaction.track(function () {
+        try {
+          rendering = fn();
+        } catch (e) {
+          exception = e;
+        }
+      });
+
+      if (exception) {
+        throw exception; // re-throw any exceptions caught during rendering
+      }
+
+      return rendering;
+    }
+
+    function observer(baseComponent, options) {
+      // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+      if (isUsingStaticRendering()) {
+        return baseComponent;
+      }
+
+      var realOptions = _extends({
+        forwardRef: false
+      }, options);
+
+      var baseComponentName = baseComponent.displayName || baseComponent.name;
+
+      var wrappedComponent = function wrappedComponent(props, ref) {
+        return useObserver(function () {
+          return baseComponent(props, ref);
+        }, baseComponentName);
+      }; // Don't set `displayName` for anonymous components,
+      // so the `displayName` can be customized by user, see #3192.
+
+
+      if (baseComponentName !== "") {
+        wrappedComponent.displayName = baseComponentName;
+      } // Support legacy context: `contextTypes` must be applied before `memo`
+
+
+      if (baseComponent.contextTypes) {
+        wrappedComponent.contextTypes = baseComponent.contextTypes;
+      } // memo; we are not interested in deep updates
+      // in props; we assume that if deep objects are changed,
+      // this is in observables, which would have been tracked anyway
+
+
+      var memoComponent;
+
+      if (realOptions.forwardRef) {
+        // we have to use forwardRef here because:
+        // 1. it cannot go before memo, only after it
+        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+        //    since it wouldn't be a callable function anymore
+        memoComponent = React.memo(React.forwardRef(wrappedComponent));
+      } else {
+        memoComponent = React.memo(wrappedComponent);
+      }
+
+      copyStaticProperties(baseComponent, memoComponent);
+
+      {
+        Object.defineProperty(memoComponent, "contextTypes", {
+          set: function set() {
+            var _this$type;
+
+            throw new Error("[mobx-react-lite] `" + (this.displayName || ((_this$type = this.type) == null ? void 0 : _this$type.displayName) || "Component") + ".contextTypes` must be set before applying `observer`.");
+          }
+        });
+      }
+
+      return memoComponent;
+    } // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+    var hoistBlackList = {
+      $$typeof: true,
+      render: true,
+      compare: true,
+      type: true,
+      // Don't redefine `displayName`,
+      // it's defined as getter-setter pair on `memo` (see #3192).
+      displayName: true
+    };
+
+    function copyStaticProperties(base, target) {
+      Object.keys(base).forEach(function (key) {
+        if (!hoistBlackList[key]) {
+          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+        }
+      });
+    }
+
+    function ObserverComponent(_ref) {
+      var children = _ref.children,
+          render = _ref.render;
+      var component = children || render;
+
+      if (typeof component !== "function") {
+        return null;
+      }
+
+      return useObserver(component);
+    }
+
+    {
+      ObserverComponent.propTypes = {
+        children: ObserverPropsCheck,
+        render: ObserverPropsCheck
+      };
+    }
+
+    ObserverComponent.displayName = "Observer";
+
+    function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+      var extraKey = key === "children" ? "render" : "children";
+      var hasProp = typeof props[key] === "function";
+      var hasExtraProp = typeof props[extraKey] === "function";
+
+      if (hasProp && hasExtraProp) {
+        return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+      }
+
+      if (hasProp || hasExtraProp) {
+        return null;
+      }
+
+      return new Error("Invalid prop `" + propFullName + "` of type `" + typeof props[key] + "` supplied to" + " `" + componentName + "`, expected `function`.");
+    }
+
+    function useLocalObservable(initializer, annotations) {
+      return React.useState(function () {
+        return mobx.observable(initializer(), annotations, {
+          autoBind: true
+        });
+      })[0];
+    }
+
+    function useAsObservableSource(current) {
+      useDeprecated("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+
+      var _useState = React.useState(function () {
+        return mobx.observable(current, {}, {
+          deep: false
+        });
+      }),
+          res = _useState[0];
+
+      mobx.runInAction(function () {
+        Object.assign(res, current);
+      });
+      return res;
+    }
+
+    function useLocalStore(initializer, current) {
+      useDeprecated("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+      var source = current && useAsObservableSource(current);
+      return React.useState(function () {
+        return mobx.observable(initializer(source), undefined, {
+          autoBind: true
+        });
+      })[0];
+    }
+
+    observerBatching(reactDom.unstable_batchedUpdates);
+    function useObserver$1(fn, baseComponentName) {
+      if (baseComponentName === void 0) {
+        baseComponentName = "observed";
+      }
+
+      {
+        useDeprecated("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+      }
+
+      return useObserver(fn, baseComponentName);
+    }
+    function useStaticRendering(enable) {
+      {
+        console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+      }
+
+      enableStaticRendering(enable);
+    }
+
+    exports.Observer = ObserverComponent;
+    exports.clearTimers = resetCleanupScheduleForTests;
+    exports.enableStaticRendering = enableStaticRendering;
+    exports.isObserverBatched = isObserverBatched;
+    exports.isUsingStaticRendering = isUsingStaticRendering;
+    exports.observer = observer;
+    exports.observerBatching = observerBatching;
+    exports.useAsObservableSource = useAsObservableSource;
+    exports.useLocalObservable = useLocalObservable;
+    exports.useLocalStore = useLocalStore;
+    exports.useObserver = useObserver$1;
+    exports.useStaticRendering = useStaticRendering;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=mobxreactlite.umd.development.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js.map
new file mode 100644
index 0000000..3409d7f
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.umd.development.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/utils.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useLocalObservable.ts","../src/useAsObservableSource.ts","../src/useLocalStore.ts","../src/index.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","const deprecatedMessages: string[] = []\n\nexport function useDeprecated(msg: string) {\n    if (!deprecatedMessages.includes(msg)) {\n        deprecatedMessages.push(msg)\n        console.warn(msg)\n    }\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","console","warn","configure","isObserverBatched","deprecatedMessages","useDeprecated","msg","includes","push","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","trackingData","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","CLEANUP_TIMER_LOOP_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","cleanupFunction","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","uncommittedReactionRefs","Set","reactionCleanupHandle","clearTimeout","cleanUncommittedReactions","size","ref","tracking","clear","ensureCleanupTimerRunning","setTimeout","scheduleCleanupOfReactionIfLeaked","add","forEach","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","useDebugValue","useEffect","Infinity","rendering","exception","track","e","observer","baseComponent","options","realOptions","forwardRef","displayName","name","wrappedComponent","props","contextTypes","memoComponent","memo","copyStaticProperties","Object","defineProperty","type","hoistBlackList","$$typeof","render","compare","base","target","keys","key","getOwnPropertyDescriptor","ObserverComponent","children","component","propTypes","ObserverPropsCheck","componentName","location","propFullName","extraKey","hasProp","hasExtraProp","useLocalObservable","initializer","annotations","observable","autoBind","useAsObservableSource","deep","res","runInAction","assign","useLocalStore","source","batch","useObserverOriginal","useStaticRendering"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js
new file mode 100644
index 0000000..4e2f262
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js
@@ -0,0 +1,2 @@
+!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("mobx"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","mobx","react","react-dom"],r):r((e=e||self).mobxReactLite={},e.mobx,e.React,e.ReactDOM)}(this,(function(e,r,t,n){"use strict";var o="default"in t?t.default:t;if(!t.useState)throw new Error("mobx-react-lite requires React with Hooks support");if(!r.makeObservable)throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");function i(e){e()}function u(e){e||(e=i),r.configure({reactionScheduler:e})}function a(e){return r.getDependencyTree(e)}var c="undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry;function f(e){return{reaction:e,mounted:!1,changedBeforeMount:!1,cleanAt:Date.now()+s}}var s=1e4;function d(e){var r=new Map,t=1,n=new e((function(e){var t=r.get(e);t&&(t.reaction.dispose(),r.delete(e))}));return{addReactionToTrack:function(e,o,i){var u=t++;return n.register(i,u,e),e.current=f(o),e.current.finalizationRegistryCleanupToken=u,r.set(u,e.current),e.current},recordReactionAsCommitted:function(e){n.unregister(e),e.current&&e.current.finalizationRegistryCleanupToken&&r.delete(e.current.finalizationRegistryCleanupToken)},forceCleanupTimerToRunNowForTests:function(){},resetCleanupScheduleForTests:function(){}}}function l(){return(l=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}function v(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function p(){var e,r=new Set;function t(){void 0===e&&(e=setTimeout(n,1e4))}function n(){e=void 0;var n=Date.now();r.forEach((function(e){var t=e.current;t&&n>=t.cleanAt&&(t.reaction.dispose(),e.current=null,r.delete(e))})),r.size>0&&t()}return{addReactionToTrack:function(e,n,o){return e.current=f(n),r.add(e),t(),e.current},recordReactionAsCommitted:function(e){r.delete(e)},forceCleanupTimerToRunNowForTests:function(){e&&(clearTimeout(e),n())},resetCleanupScheduleForTests:function(){if(r.size>0){for(var t,n=function(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return v(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?v(e,void 0):void 0}}(e))){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r);!(t=n()).done;){var o=t.value,i=o.current;i&&(i.reaction.dispose(),o.current=null)}r.clear()}e&&(clearTimeout(e),e=void 0)}}}var b=c?d(c):p(),m=b.addReactionToTrack,y=b.recordReactionAsCommitted,g=b.resetCleanupScheduleForTests,h=!1;function T(e){h=e}function R(){return h}function w(e){return"observer"+e}var S=function(){};function O(){return new S}function x(e,t){if(void 0===t&&(t="observed"),R())return e();var n=o.useState(O)[0],i=o.useState()[1],u=function(){return i([])},c=o.useRef(null);if(!c.current)var f=new r.Reaction(w(t),(function(){s.mounted?u():s.changedBeforeMount=!0})),s=m(c,f,n);var d,l,v=c.current.reaction;if(o.useDebugValue(v,a),o.useEffect((function(){return y(c),c.current?(c.current.mounted=!0,c.current.changedBeforeMount&&(c.current.changedBeforeMount=!1,u())):(c.current={reaction:new r.Reaction(w(t),(function(){u()})),mounted:!0,changedBeforeMount:!1,cleanAt:Infinity},u()),function(){c.current.reaction.dispose(),c.current=null}}),[]),v.track((function(){try{d=e()}catch(e){l=e}})),l)throw l;return d}var A={$$typeof:!0,render:!0,compare:!0,type:!0,displayName:!0};function C(e){var r=e.children||e.render;return"function"!=typeof r?null:x(r)}function j(e){var n=t.useState((function(){return r.observable(e,{},{deep:!1})}))[0];return r.runInAction((function(){Object.assign(n,e)})),n}C.displayName="Observer",u(n.unstable_batchedUpdates),e.Observer=C,e.clearTimers=g,e.enableStaticRendering=T,e.isObserverBatched=function(){return!0},e.isUsingStaticRendering=R,e.observer=function(e,r){if(R())return e;var n,o,i,u=l({forwardRef:!1},r),a=e.displayName||e.name,c=function(r,t){return x((function(){return e(r,t)}),a)};return""!==a&&(c.displayName=a),e.contextTypes&&(c.contextTypes=e.contextTypes),n=t.memo(u.forwardRef?t.forwardRef(c):c),o=e,i=n,Object.keys(o).forEach((function(e){A[e]||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(o,e))})),n},e.observerBatching=u,e.useAsObservableSource=j,e.useLocalObservable=function(e,n){return t.useState((function(){return r.observable(e(),n,{autoBind:!0})}))[0]},e.useLocalStore=function(e,n){var o=n&&j(n);return t.useState((function(){return r.observable(e(o),void 0,{autoBind:!0})}))[0]},e.useObserver=function(e,r){return void 0===r&&(r="observed"),x(e,r)},e.useStaticRendering=function(e){T(e)},Object.defineProperty(e,"__esModule",{value:!0})}));
+//# sourceMappingURL=mobxreactlite.umd.production.min.js.map
diff --git a/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js.map b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js.map
new file mode 100644
index 0000000..532b6dd
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/mobxreactlite.umd.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreactlite.umd.production.min.js","sources":["../src/utils/assertEnvironment.ts","../src/utils/observerBatching.ts","../src/utils/printDebugValue.ts","../src/utils/FinalizationRegistryWrapper.ts","../src/utils/reactionCleanupTrackingCommon.ts","../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts","../src/utils/createTimerBasedReactionCleanupTracking.ts","../src/utils/reactionCleanupTracking.ts","../src/staticRendering.ts","../src/useObserver.ts","../src/observer.ts","../src/ObserverComponent.ts","../src/useAsObservableSource.ts","../src/index.ts","../src/useLocalObservable.ts","../src/useLocalStore.ts"],"sourcesContent":["import { makeObservable } from \"mobx\"\nimport { useState } from \"react\"\n\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\")\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\")\n}\n","import { configure } from \"mobx\"\n\nexport function defaultNoopBatch(callback: () => void) {\n    callback()\n}\n\nexport function observerBatching(reactionScheduler: any) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\n                \"[MobX] Failed to get unstable_batched updates from react-dom / react-native\"\n            )\n        }\n    }\n    configure({ reactionScheduler })\n}\n\nexport const isObserverBatched = () => {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\")\n    }\n\n    return true\n}\n","import { getDependencyTree, Reaction } from \"mobx\"\n\nexport function printDebugValue(v: Reaction) {\n    return getDependencyTree(v)\n}\n","declare class FinalizationRegistryType<T> {\n    constructor(cleanup: (cleanupToken: T) => void)\n    register(object: object, cleanupToken: T, unregisterToken?: object): void\n    unregister(unregisterToken: object): void\n}\n\ndeclare const FinalizationRegistry: typeof FinalizationRegistryType | undefined\n\nconst FinalizationRegistryLocal =\n    typeof FinalizationRegistry === \"undefined\" ? undefined : FinalizationRegistry\n\nexport { FinalizationRegistryLocal as FinalizationRegistry }\n","import { Reaction } from \"mobx\"\n\nexport function createTrackingData(reaction: Reaction) {\n    const trackingData: IReactionTracking = {\n        reaction,\n        mounted: false,\n        changedBeforeMount: false,\n        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS\n    }\n    return trackingData\n}\n\n/**\n * Unified api for timers/Finalization registry cleanups\n * This abstraction make useObserver much simpler\n */\nexport interface ReactionCleanupTracking {\n    /**\n     *\n     * @param reaction The reaction to cleanup\n     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use\n     */\n    addReactionToTrack(\n        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n        reaction: Reaction,\n        objectRetainedByReact: object\n    ): IReactionTracking\n    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void\n    forceCleanupTimerToRunNowForTests(): void\n    resetCleanupScheduleForTests(): void\n}\n\nexport interface IReactionTracking {\n    /** The Reaction created during first render, which may be leaked */\n    reaction: Reaction\n    /**\n     * The time (in ticks) at which point we should dispose of the reaction\n     * if this component hasn't yet been fully mounted.\n     */\n    cleanAt: number\n\n    /**\n     * Whether the component has yet completed mounting (for us, whether\n     * its useEffect has run)\n     */\n    mounted: boolean\n\n    /**\n     * Whether the observables that the component is tracking changed between\n     * the first render and the first useEffect.\n     */\n    changedBeforeMount: boolean\n\n    /**\n     * In case we are using finalization registry based cleanup,\n     * this will hold the cleanup token associated with this reaction\n     */\n    finalizationRegistryCleanupToken?: number\n}\n\n/**\n * The minimum time before we'll clean up a Reaction created in a render\n * for a component that hasn't managed to run its effects. This needs to\n * be big enough to ensure that a component won't turn up and have its\n * effects run without being re-rendered.\n */\nexport const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000\n\n/**\n * The frequency with which we'll check for leaked reactions.\n */\nexport const CLEANUP_TIMER_LOOP_MILLIS = 10_000\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * FinalizationRegistry-based uncommitted reaction cleanup\n */\nexport function createReactionCleanupTrackingUsingFinalizationRegister(\n    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>\n): ReactionCleanupTracking {\n    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()\n    let globalCleanupTokensCounter = 1\n\n    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {\n        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)\n        if (trackedReaction) {\n            trackedReaction.reaction.dispose()\n            cleanupTokenToReactionTrackingMap.delete(token)\n        }\n    })\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            objectRetainedByReact: object\n        ) {\n            const token = globalCleanupTokensCounter++\n\n            registry.register(objectRetainedByReact, token, reactionTrackingRef)\n            reactionTrackingRef.current = createTrackingData(reaction)\n            reactionTrackingRef.current.finalizationRegistryCleanupToken = token\n            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)\n\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {\n            registry.unregister(reactionRef)\n\n            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {\n                cleanupTokenToReactionTrackingMap.delete(\n                    reactionRef.current.finalizationRegistryCleanupToken\n                )\n            }\n        },\n        forceCleanupTimerToRunNowForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        },\n        resetCleanupScheduleForTests() {\n            // When FinalizationRegistry in use, this this is no-op\n        }\n    }\n}\n","import { Reaction } from \"mobx\"\nimport {\n    ReactionCleanupTracking,\n    IReactionTracking,\n    CLEANUP_TIMER_LOOP_MILLIS,\n    createTrackingData\n} from \"./reactionCleanupTrackingCommon\"\n\n/**\n * timers, gc-style, uncommitted reaction cleanup\n */\nexport function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {\n    /**\n     * Reactions created by components that have yet to be fully mounted.\n     */\n    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()\n\n    /**\n     * Latest 'uncommitted reactions' cleanup timer handle.\n     */\n    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined\n\n    /* istanbul ignore next */\n    /**\n     * Only to be used by test functions; do not export outside of mobx-react-lite\n     */\n    function forceCleanupTimerToRunNowForTests() {\n        // This allows us to control the execution of the cleanup timer\n        // to force it to run at awkward times in unit tests.\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            cleanUncommittedReactions()\n        }\n    }\n\n    /* istanbul ignore next */\n    function resetCleanupScheduleForTests() {\n        if (uncommittedReactionRefs.size > 0) {\n            for (const ref of uncommittedReactionRefs) {\n                const tracking = ref.current\n                if (tracking) {\n                    tracking.reaction.dispose()\n                    ref.current = null\n                }\n            }\n            uncommittedReactionRefs.clear()\n        }\n\n        if (reactionCleanupHandle) {\n            clearTimeout(reactionCleanupHandle)\n            reactionCleanupHandle = undefined\n        }\n    }\n\n    function ensureCleanupTimerRunning() {\n        if (reactionCleanupHandle === undefined) {\n            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)\n        }\n    }\n\n    function scheduleCleanupOfReactionIfLeaked(\n        ref: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.add(ref)\n\n        ensureCleanupTimerRunning()\n    }\n\n    function recordReactionAsCommitted(\n        reactionRef: React.MutableRefObject<IReactionTracking | null>\n    ) {\n        uncommittedReactionRefs.delete(reactionRef)\n    }\n\n    /**\n     * Run by the cleanup timer to dispose any outstanding reactions\n     */\n    function cleanUncommittedReactions() {\n        reactionCleanupHandle = undefined\n\n        // Loop through all the candidate leaked reactions; those older\n        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.\n\n        const now = Date.now()\n        uncommittedReactionRefs.forEach(ref => {\n            const tracking = ref.current\n            if (tracking) {\n                if (now >= tracking.cleanAt) {\n                    // It's time to tidy up this leaked reaction.\n                    tracking.reaction.dispose()\n                    ref.current = null\n                    uncommittedReactionRefs.delete(ref)\n                }\n            }\n        })\n\n        if (uncommittedReactionRefs.size > 0) {\n            // We've just finished a round of cleanups but there are still\n            // some leak candidates outstanding.\n            ensureCleanupTimerRunning()\n        }\n    }\n\n    return {\n        addReactionToTrack(\n            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,\n            reaction: Reaction,\n            /**\n             * On timer based implementation we don't really need this object,\n             * but we keep the same api\n             */\n            objectRetainedByReact: unknown\n        ) {\n            reactionTrackingRef.current = createTrackingData(reaction)\n            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)\n            return reactionTrackingRef.current\n        },\n        recordReactionAsCommitted,\n        forceCleanupTimerToRunNowForTests,\n        resetCleanupScheduleForTests\n    }\n}\n","import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from \"./FinalizationRegistryWrapper\"\nimport { createReactionCleanupTrackingUsingFinalizationRegister } from \"./createReactionCleanupTrackingUsingFinalizationRegister\"\nimport { createTimerBasedReactionCleanupTracking } from \"./createTimerBasedReactionCleanupTracking\"\nexport { IReactionTracking } from \"./reactionCleanupTrackingCommon\"\n\nconst {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n} = FinalizationRegistryMaybeUndefined\n    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)\n    : createTimerBasedReactionCleanupTracking()\n\nexport {\n    addReactionToTrack,\n    recordReactionAsCommitted,\n    resetCleanupScheduleForTests,\n    forceCleanupTimerToRunNowForTests\n}\n","let globalIsUsingStaticRendering = false\n\nexport function enableStaticRendering(enable: boolean) {\n    globalIsUsingStaticRendering = enable\n}\n\nexport function isUsingStaticRendering(): boolean {\n    return globalIsUsingStaticRendering\n}\n","import { Reaction } from \"mobx\"\nimport React from \"react\"\nimport { printDebugValue } from \"./utils/printDebugValue\"\nimport {\n    addReactionToTrack,\n    IReactionTracking,\n    recordReactionAsCommitted\n} from \"./utils/reactionCleanupTracking\"\nimport { isUsingStaticRendering } from \"./staticRendering\"\n\nfunction observerComponentNameFor(baseComponentName: string) {\n    return `observer${baseComponentName}`\n}\n\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nclass ObjectToBeRetainedByReact {}\n\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact()\n}\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (isUsingStaticRendering()) {\n        return fn()\n    }\n\n    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)\n    // Force update, see #2982\n    const [, setState] = React.useState()\n    const forceUpdate = () => setState([] as any)\n\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)\n\n    if (!reactionTrackingRef.current) {\n        // First render for this component (or first time since a previous\n        // reaction from an abandoned render was disposed).\n\n        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (trackingData.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate()\n            } else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                trackingData.changedBeforeMount = true\n            }\n        })\n\n        const trackingData = addReactionToTrack(\n            reactionTrackingRef,\n            newReaction,\n            objectRetainedByReact\n        )\n    }\n\n    const { reaction } = reactionTrackingRef.current!\n    React.useDebugValue(reaction, printDebugValue)\n\n    React.useEffect(() => {\n        // Called on first mount only\n        recordReactionAsCommitted(reactionTrackingRef)\n\n        if (reactionTrackingRef.current) {\n            // Great. We've already got our reaction from our render;\n            // all we need to do is to record that it's now mounted,\n            // to allow future observable changes to trigger re-renders\n            reactionTrackingRef.current.mounted = true\n            // Got a change before first mount, force an update\n            if (reactionTrackingRef.current.changedBeforeMount) {\n                reactionTrackingRef.current.changedBeforeMount = false\n                forceUpdate()\n            }\n        } else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n\n            // Re-create the reaction\n            reactionTrackingRef.current = {\n                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {\n                    // We've definitely already been mounted at this point\n                    forceUpdate()\n                }),\n                mounted: true,\n                changedBeforeMount: false,\n                cleanAt: Infinity\n            }\n            forceUpdate()\n        }\n\n        return () => {\n            reactionTrackingRef.current!.reaction.dispose()\n            reactionTrackingRef.current = null\n        }\n    }, [])\n\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    let rendering!: T\n    let exception\n    reaction.track(() => {\n        try {\n            rendering = fn()\n        } catch (e) {\n            exception = e\n        }\n    })\n\n    if (exception) {\n        throw exception // re-throw any exceptions caught during rendering\n    }\n\n    return rendering\n}\n","import { forwardRef, memo } from \"react\"\n\nimport { isUsingStaticRendering } from \"./staticRendering\"\nimport { useObserver } from \"./useObserver\"\n\nexport interface IObserverOptions {\n    readonly forwardRef?: boolean\n}\n\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P>,\n    options: IObserverOptions & { forwardRef: true }\n): React.MemoExoticComponent<\n    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>\n>\n\nexport function observer<P extends object>(\n    baseComponent: React.FunctionComponent<P>,\n    options?: IObserverOptions\n): React.FunctionComponent<P>\n\nexport function observer<\n    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,\n    Options extends IObserverOptions\n>(\n    baseComponent: C,\n    options?: Options\n): Options extends { forwardRef: true }\n    ? C extends React.RefForwardingComponent<infer TRef, infer P>\n        ? C &\n              React.MemoExoticComponent<\n                  React.ForwardRefExoticComponent<\n                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>\n                  >\n              >\n        : never /* forwardRef set for a non forwarding component */\n    : C & { displayName: string }\n\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer<P extends object, TRef = {}>(\n    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,\n    options?: IObserverOptions\n) {\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent\n    }\n\n    const realOptions = {\n        forwardRef: false,\n        ...options\n    }\n\n    const baseComponentName = baseComponent.displayName || baseComponent.name\n\n    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {\n        return useObserver(() => baseComponent(props, ref), baseComponentName)\n    }\n\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        wrappedComponent.displayName = baseComponentName\n    }\n\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if ((baseComponent as any).contextTypes) {\n        wrappedComponent.contextTypes = (baseComponent as any).contextTypes\n    }\n\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    let memoComponent\n    if (realOptions.forwardRef) {\n        // we have to use forwardRef here because:\n        // 1. it cannot go before memo, only after it\n        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it\n        //    since it wouldn't be a callable function anymore\n        memoComponent = memo(forwardRef(wrappedComponent))\n    } else {\n        memoComponent = memo(wrappedComponent)\n    }\n\n    copyStaticProperties(baseComponent, memoComponent)\n\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(memoComponent, \"contextTypes\", {\n            set() {\n                throw new Error(\n                    `[mobx-react-lite] \\`${\n                        this.displayName || this.type?.displayName || \"Component\"\n                    }.contextTypes\\` must be set before applying \\`observer\\`.`\n                )\n            }\n        })\n    }\n\n    return memoComponent\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList: any = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n}\n\nfunction copyStaticProperties(base: any, target: any) {\n    Object.keys(base).forEach(key => {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n","import { useObserver } from \"./useObserver\"\n\ninterface IObserverProps {\n    children?(): React.ReactElement | null\n    render?(): React.ReactElement | null\n}\n\nfunction ObserverComponent({ children, render }: IObserverProps) {\n    const component = children || render\n    if (typeof component !== \"function\") {\n        return null\n    }\n    return useObserver(component)\n}\nif (\"production\" !== process.env.NODE_ENV) {\n    ObserverComponent.propTypes = {\n        children: ObserverPropsCheck,\n        render: ObserverPropsCheck\n    }\n}\nObserverComponent.displayName = \"Observer\"\n\nexport { ObserverComponent as Observer }\n\nfunction ObserverPropsCheck(\n    props: { [k: string]: any },\n    key: string,\n    componentName: string,\n    location: any,\n    propFullName: string\n) {\n    const extraKey = key === \"children\" ? \"render\" : \"children\"\n    const hasProp = typeof props[key] === \"function\"\n    const hasExtraProp = typeof props[extraKey] === \"function\"\n    if (hasProp && hasExtraProp) {\n        return new Error(\n            \"MobX Observer: Do not use children and render in the same time in`\" + componentName\n        )\n    }\n\n    if (hasProp || hasExtraProp) {\n        return null\n    }\n    return new Error(\n        \"Invalid prop `\" +\n            propFullName +\n            \"` of type `\" +\n            typeof props[key] +\n            \"` supplied to\" +\n            \" `\" +\n            componentName +\n            \"`, expected `function`.\"\n    )\n}\n","import { useDeprecated } from \"./utils/utils\"\nimport { observable, runInAction } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useAsObservableSource<TSource extends object>(current: TSource): TSource {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.\"\n        )\n    const [res] = useState(() => observable(current, {}, { deep: false }))\n    runInAction(() => {\n        Object.assign(res, current)\n    })\n    return res\n}\n","import \"./utils/assertEnvironment\"\n\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\"\nimport { observerBatching } from \"./utils/observerBatching\"\nimport { useDeprecated } from \"./utils/utils\"\nimport { useObserver as useObserverOriginal } from \"./useObserver\"\nimport { enableStaticRendering } from \"./staticRendering\"\n\nobserverBatching(batch)\n\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\"\nexport { observer, IObserverOptions } from \"./observer\"\nexport { Observer } from \"./ObserverComponent\"\nexport { useLocalObservable } from \"./useLocalObservable\"\nexport { useLocalStore } from \"./useLocalStore\"\nexport { useAsObservableSource } from \"./useAsObservableSource\"\nexport { resetCleanupScheduleForTests as clearTimers } from \"./utils/reactionCleanupTracking\"\n\nexport function useObserver<T>(fn: () => T, baseComponentName: string = \"observed\"): T {\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\n            \"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\"\n        )\n    }\n    return useObserverOriginal(fn, baseComponentName)\n}\n\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\"\n\nexport function useStaticRendering(enable: boolean) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\n            \"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\"\n        )\n    }\n    enableStaticRendering(enable)\n}\n","import { observable, AnnotationsMap } from \"mobx\"\nimport { useState } from \"react\"\n\nexport function useLocalObservable<TStore extends Record<string, any>>(\n    initializer: () => TStore,\n    annotations?: AnnotationsMap<TStore, never>\n): TStore {\n    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]\n}\n","import { observable } from \"mobx\"\nimport { useState } from \"react\"\n\nimport { useDeprecated } from \"./utils/utils\"\nimport { useAsObservableSource } from \"./useAsObservableSource\"\n\nexport function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source: TSource) => TStore,\n    current: TSource\n): TStore\nexport function useLocalStore<TStore extends Record<string, any>, TSource extends object>(\n    initializer: (source?: TSource) => TStore,\n    current?: TSource\n): TStore {\n    if (\"production\" !== process.env.NODE_ENV)\n        useDeprecated(\n            \"[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.\"\n        )\n    const source = current && useAsObservableSource(current)\n    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]\n}\n"],"names":["useState","Error","makeObservable","defaultNoopBatch","callback","observerBatching","reactionScheduler","configure","printDebugValue","v","getDependencyTree","FinalizationRegistryLocal","FinalizationRegistry","undefined","createTrackingData","reaction","mounted","changedBeforeMount","cleanAt","Date","now","CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS","createReactionCleanupTrackingUsingFinalizationRegister","cleanupTokenToReactionTrackingMap","Map","globalCleanupTokensCounter","registry","token","trackedReaction","get","dispose","addReactionToTrack","reactionTrackingRef","objectRetainedByReact","register","current","finalizationRegistryCleanupToken","set","recordReactionAsCommitted","reactionRef","unregister","forceCleanupTimerToRunNowForTests","resetCleanupScheduleForTests","createTimerBasedReactionCleanupTracking","reactionCleanupHandle","uncommittedReactionRefs","Set","ensureCleanupTimerRunning","setTimeout","cleanUncommittedReactions","forEach","ref","tracking","size","add","clearTimeout","clear","FinalizationRegistryMaybeUndefined","globalIsUsingStaticRendering","enableStaticRendering","enable","isUsingStaticRendering","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","fn","React","setState","forceUpdate","useRef","newReaction","Reaction","trackingData","rendering","exception","useDebugValue","useEffect","Infinity","track","e","hoistBlackList","$$typeof","render","compare","type","displayName","ObserverComponent","component","children","useAsObservableSource","res","observable","deep","runInAction","Object","assign","batch","baseComponent","options","memoComponent","base","target","realOptions","forwardRef","name","wrappedComponent","props","contextTypes","memo","keys","key","defineProperty","getOwnPropertyDescriptor","initializer","annotations","autoBind","source","useObserverOriginal"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/dist/observer.d.ts b/node_modules/mobx-react-lite/dist/observer.d.ts
new file mode 100644
index 0000000..7864a24
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/observer.d.ts
@@ -0,0 +1,13 @@
+/// <reference types="react" />
+export interface IObserverOptions {
+    readonly forwardRef?: boolean;
+}
+export declare function observer<P extends object, TRef = {}>(baseComponent: React.RefForwardingComponent<TRef, P>, options: IObserverOptions & {
+    forwardRef: true;
+}): React.MemoExoticComponent<React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>>;
+export declare function observer<P extends object>(baseComponent: React.FunctionComponent<P>, options?: IObserverOptions): React.FunctionComponent<P>;
+export declare function observer<C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>, Options extends IObserverOptions>(baseComponent: C, options?: Options): Options extends {
+    forwardRef: true;
+} ? C extends React.RefForwardingComponent<infer TRef, infer P> ? C & React.MemoExoticComponent<React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>> : never : C & {
+    displayName: string;
+};
diff --git a/node_modules/mobx-react-lite/dist/staticRendering.d.ts b/node_modules/mobx-react-lite/dist/staticRendering.d.ts
new file mode 100644
index 0000000..442339e
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/staticRendering.d.ts
@@ -0,0 +1,2 @@
+export declare function enableStaticRendering(enable: boolean): void;
+export declare function isUsingStaticRendering(): boolean;
diff --git a/node_modules/mobx-react-lite/dist/useAsObservableSource.d.ts b/node_modules/mobx-react-lite/dist/useAsObservableSource.d.ts
new file mode 100644
index 0000000..39c9421
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/useAsObservableSource.d.ts
@@ -0,0 +1 @@
+export declare function useAsObservableSource<TSource extends object>(current: TSource): TSource;
diff --git a/node_modules/mobx-react-lite/dist/useLocalObservable.d.ts b/node_modules/mobx-react-lite/dist/useLocalObservable.d.ts
new file mode 100644
index 0000000..da603ba
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/useLocalObservable.d.ts
@@ -0,0 +1,2 @@
+import { AnnotationsMap } from "mobx";
+export declare function useLocalObservable<TStore extends Record<string, any>>(initializer: () => TStore, annotations?: AnnotationsMap<TStore, never>): TStore;
diff --git a/node_modules/mobx-react-lite/dist/useLocalStore.d.ts b/node_modules/mobx-react-lite/dist/useLocalStore.d.ts
new file mode 100644
index 0000000..f26865f
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/useLocalStore.d.ts
@@ -0,0 +1,2 @@
+export declare function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore;
+export declare function useLocalStore<TStore extends Record<string, any>, TSource extends object>(initializer: (source: TSource) => TStore, current: TSource): TStore;
diff --git a/node_modules/mobx-react-lite/dist/useObserver.d.ts b/node_modules/mobx-react-lite/dist/useObserver.d.ts
new file mode 100644
index 0000000..7907541
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/useObserver.d.ts
@@ -0,0 +1 @@
+export declare function useObserver<T>(fn: () => T, baseComponentName?: string): T;
diff --git a/node_modules/mobx-react-lite/dist/utils/FinalizationRegistryWrapper.d.ts b/node_modules/mobx-react-lite/dist/utils/FinalizationRegistryWrapper.d.ts
new file mode 100644
index 0000000..677c4c5
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/FinalizationRegistryWrapper.d.ts
@@ -0,0 +1,7 @@
+declare class FinalizationRegistryType<T> {
+    constructor(cleanup: (cleanupToken: T) => void);
+    register(object: object, cleanupToken: T, unregisterToken?: object): void;
+    unregister(unregisterToken: object): void;
+}
+declare const FinalizationRegistryLocal: typeof FinalizationRegistryType | undefined;
+export { FinalizationRegistryLocal as FinalizationRegistry };
diff --git a/node_modules/mobx-react-lite/dist/utils/assertEnvironment.d.ts b/node_modules/mobx-react-lite/dist/utils/assertEnvironment.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/assertEnvironment.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/node_modules/mobx-react-lite/dist/utils/createReactionCleanupTrackingUsingFinalizationRegister.d.ts b/node_modules/mobx-react-lite/dist/utils/createReactionCleanupTrackingUsingFinalizationRegister.d.ts
new file mode 100644
index 0000000..300948a
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/createReactionCleanupTrackingUsingFinalizationRegister.d.ts
@@ -0,0 +1,6 @@
+import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from "./FinalizationRegistryWrapper";
+import { ReactionCleanupTracking } from "./reactionCleanupTrackingCommon";
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+export declare function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>): ReactionCleanupTracking;
diff --git a/node_modules/mobx-react-lite/dist/utils/createTimerBasedReactionCleanupTracking.d.ts b/node_modules/mobx-react-lite/dist/utils/createTimerBasedReactionCleanupTracking.d.ts
new file mode 100644
index 0000000..9bc1114
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/createTimerBasedReactionCleanupTracking.d.ts
@@ -0,0 +1,5 @@
+import { ReactionCleanupTracking } from "./reactionCleanupTrackingCommon";
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+export declare function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking;
diff --git a/node_modules/mobx-react-lite/dist/utils/observerBatching.d.ts b/node_modules/mobx-react-lite/dist/utils/observerBatching.d.ts
new file mode 100644
index 0000000..dea7d4d
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/observerBatching.d.ts
@@ -0,0 +1,3 @@
+export declare function defaultNoopBatch(callback: () => void): void;
+export declare function observerBatching(reactionScheduler: any): void;
+export declare const isObserverBatched: () => boolean;
diff --git a/node_modules/mobx-react-lite/dist/utils/printDebugValue.d.ts b/node_modules/mobx-react-lite/dist/utils/printDebugValue.d.ts
new file mode 100644
index 0000000..6d2948f
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/printDebugValue.d.ts
@@ -0,0 +1,2 @@
+import { Reaction } from "mobx";
+export declare function printDebugValue(v: Reaction): import("mobx").IDependencyTree;
diff --git a/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.d.ts b/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.d.ts
new file mode 100644
index 0000000..0853a95
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.d.ts
@@ -0,0 +1 @@
+export { unstable_batchedUpdates } from "react-dom";
diff --git a/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.native.d.ts b/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.native.d.ts
new file mode 100644
index 0000000..ee185cf
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/reactBatchedUpdates.native.d.ts
@@ -0,0 +1 @@
+export { unstable_batchedUpdates } from "react-native";
diff --git a/node_modules/mobx-react-lite/dist/utils/reactionCleanupTracking.d.ts b/node_modules/mobx-react-lite/dist/utils/reactionCleanupTracking.d.ts
new file mode 100644
index 0000000..2829d04
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/reactionCleanupTracking.d.ts
@@ -0,0 +1,4 @@
+/// <reference types="react" />
+export { IReactionTracking } from "./reactionCleanupTrackingCommon";
+declare const addReactionToTrack: (reactionTrackingRef: import("react").MutableRefObject<import("./reactionCleanupTrackingCommon").IReactionTracking | null>, reaction: import("mobx").Reaction, objectRetainedByReact: object) => import("./reactionCleanupTrackingCommon").IReactionTracking, recordReactionAsCommitted: (reactionRef: import("react").MutableRefObject<import("./reactionCleanupTrackingCommon").IReactionTracking | null>) => void, resetCleanupScheduleForTests: () => void, forceCleanupTimerToRunNowForTests: () => void;
+export { addReactionToTrack, recordReactionAsCommitted, resetCleanupScheduleForTests, forceCleanupTimerToRunNowForTests };
diff --git a/node_modules/mobx-react-lite/dist/utils/reactionCleanupTrackingCommon.d.ts b/node_modules/mobx-react-lite/dist/utils/reactionCleanupTrackingCommon.d.ts
new file mode 100644
index 0000000..d87623a
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/reactionCleanupTrackingCommon.d.ts
@@ -0,0 +1,53 @@
+/// <reference types="react" />
+import { Reaction } from "mobx";
+export declare function createTrackingData(reaction: Reaction): IReactionTracking;
+/**
+ * Unified api for timers/Finalization registry cleanups
+ * This abstraction make useObserver much simpler
+ */
+export interface ReactionCleanupTracking {
+    /**
+     *
+     * @param reaction The reaction to cleanup
+     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use
+     */
+    addReactionToTrack(reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>, reaction: Reaction, objectRetainedByReact: object): IReactionTracking;
+    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void;
+    forceCleanupTimerToRunNowForTests(): void;
+    resetCleanupScheduleForTests(): void;
+}
+export interface IReactionTracking {
+    /** The Reaction created during first render, which may be leaked */
+    reaction: Reaction;
+    /**
+     * The time (in ticks) at which point we should dispose of the reaction
+     * if this component hasn't yet been fully mounted.
+     */
+    cleanAt: number;
+    /**
+     * Whether the component has yet completed mounting (for us, whether
+     * its useEffect has run)
+     */
+    mounted: boolean;
+    /**
+     * Whether the observables that the component is tracking changed between
+     * the first render and the first useEffect.
+     */
+    changedBeforeMount: boolean;
+    /**
+     * In case we are using finalization registry based cleanup,
+     * this will hold the cleanup token associated with this reaction
+     */
+    finalizationRegistryCleanupToken?: number;
+}
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+export declare const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+export declare const CLEANUP_TIMER_LOOP_MILLIS = 10000;
diff --git a/node_modules/mobx-react-lite/dist/utils/utils.d.ts b/node_modules/mobx-react-lite/dist/utils/utils.d.ts
new file mode 100644
index 0000000..9445f94
--- /dev/null
+++ b/node_modules/mobx-react-lite/dist/utils/utils.d.ts
@@ -0,0 +1 @@
+export declare function useDeprecated(msg: string): void;
diff --git a/node_modules/mobx-react-lite/es/ObserverComponent.js b/node_modules/mobx-react-lite/es/ObserverComponent.js
new file mode 100644
index 0000000..64114f9
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/ObserverComponent.js
@@ -0,0 +1,37 @@
+import { useObserver } from "./useObserver";
+function ObserverComponent(_a) {
+    var children = _a.children, render = _a.render;
+    var component = children || render;
+    if (typeof component !== "function") {
+        return null;
+    }
+    return useObserver(component);
+}
+if ("production" !== process.env.NODE_ENV) {
+    ObserverComponent.propTypes = {
+        children: ObserverPropsCheck,
+        render: ObserverPropsCheck
+    };
+}
+ObserverComponent.displayName = "Observer";
+export { ObserverComponent as Observer };
+function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+    var extraKey = key === "children" ? "render" : "children";
+    var hasProp = typeof props[key] === "function";
+    var hasExtraProp = typeof props[extraKey] === "function";
+    if (hasProp && hasExtraProp) {
+        return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+    }
+    if (hasProp || hasExtraProp) {
+        return null;
+    }
+    return new Error("Invalid prop `" +
+        propFullName +
+        "` of type `" +
+        typeof props[key] +
+        "` supplied to" +
+        " `" +
+        componentName +
+        "`, expected `function`.");
+}
+//# sourceMappingURL=ObserverComponent.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/ObserverComponent.js.map b/node_modules/mobx-react-lite/es/ObserverComponent.js.map
new file mode 100644
index 0000000..f96591e
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/ObserverComponent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ObserverComponent.js","sourceRoot":"","sources":["../src/ObserverComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAO3C,SAAS,iBAAiB,CAAC,EAAoC;QAAlC,QAAQ,cAAA,EAAE,MAAM,YAAA;IACzC,IAAM,SAAS,GAAG,QAAQ,IAAI,MAAM,CAAA;IACpC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;QACjC,OAAO,IAAI,CAAA;KACd;IACD,OAAO,WAAW,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AACD,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;IACvC,iBAAiB,CAAC,SAAS,GAAG;QAC1B,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,kBAAkB;KAC7B,CAAA;CACJ;AACD,iBAAiB,CAAC,WAAW,GAAG,UAAU,CAAA;AAE1C,OAAO,EAAE,iBAAiB,IAAI,QAAQ,EAAE,CAAA;AAExC,SAAS,kBAAkB,CACvB,KAA2B,EAC3B,GAAW,EACX,aAAqB,EACrB,QAAa,EACb,YAAoB;IAEpB,IAAM,QAAQ,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAA;IAC3D,IAAM,OAAO,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,CAAA;IAChD,IAAM,YAAY,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAA;IAC1D,IAAI,OAAO,IAAI,YAAY,EAAE;QACzB,OAAO,IAAI,KAAK,CACZ,oEAAoE,GAAG,aAAa,CACvF,CAAA;KACJ;IAED,IAAI,OAAO,IAAI,YAAY,EAAE;QACzB,OAAO,IAAI,CAAA;KACd;IACD,OAAO,IAAI,KAAK,CACZ,gBAAgB;QACZ,YAAY;QACZ,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC;QACjB,eAAe;QACf,IAAI;QACJ,aAAa;QACb,yBAAyB,CAChC,CAAA;AACL,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/index.js b/node_modules/mobx-react-lite/es/index.js
new file mode 100644
index 0000000..5f6d52d
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/index.js
@@ -0,0 +1,29 @@
+import "./utils/assertEnvironment";
+import { unstable_batchedUpdates as batch } from "./utils/reactBatchedUpdates";
+import { observerBatching } from "./utils/observerBatching";
+import { useDeprecated } from "./utils/utils";
+import { useObserver as useObserverOriginal } from "./useObserver";
+import { enableStaticRendering } from "./staticRendering";
+observerBatching(batch);
+export { isUsingStaticRendering, enableStaticRendering } from "./staticRendering";
+export { observer } from "./observer";
+export { Observer } from "./ObserverComponent";
+export { useLocalObservable } from "./useLocalObservable";
+export { useLocalStore } from "./useLocalStore";
+export { useAsObservableSource } from "./useAsObservableSource";
+export { resetCleanupScheduleForTests as clearTimers } from "./utils/reactionCleanupTracking";
+export function useObserver(fn, baseComponentName) {
+    if (baseComponentName === void 0) { baseComponentName = "observed"; }
+    if ("production" !== process.env.NODE_ENV) {
+        useDeprecated("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+    }
+    return useObserverOriginal(fn, baseComponentName);
+}
+export { isObserverBatched, observerBatching } from "./utils/observerBatching";
+export function useStaticRendering(enable) {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+    }
+    enableStaticRendering(enable);
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/index.js.map b/node_modules/mobx-react-lite/es/index.js.map
new file mode 100644
index 0000000..5df267d
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAA;AAElC,OAAO,EAAE,uBAAuB,IAAI,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,WAAW,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,gBAAgB,CAAC,KAAK,CAAC,CAAA;AAEvB,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,4BAA4B,IAAI,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAE7F,MAAM,UAAU,WAAW,CAAI,EAAW,EAAE,iBAAsC;IAAtC,kCAAA,EAAA,8BAAsC;IAC9E,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,aAAa,CACT,yIAAyI,CAC5I,CAAA;KACJ;IACD,OAAO,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAA;AACrD,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE9E,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAC9C,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,OAAO,CAAC,IAAI,CACR,2FAA2F,CAC9F,CAAA;KACJ;IACD,qBAAqB,CAAC,MAAM,CAAC,CAAA;AACjC,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/observer.js b/node_modules/mobx-react-lite/es/observer.js
new file mode 100644
index 0000000..9a4356b
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/observer.js
@@ -0,0 +1,77 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+import { forwardRef, memo } from "react";
+import { isUsingStaticRendering } from "./staticRendering";
+import { useObserver } from "./useObserver";
+// n.b. base case is not used for actual typings or exported in the typing files
+export function observer(baseComponent, options) {
+    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+    if (isUsingStaticRendering()) {
+        return baseComponent;
+    }
+    var realOptions = __assign({ forwardRef: false }, options);
+    var baseComponentName = baseComponent.displayName || baseComponent.name;
+    var wrappedComponent = function (props, ref) {
+        return useObserver(function () { return baseComponent(props, ref); }, baseComponentName);
+    };
+    // Don't set `displayName` for anonymous components,
+    // so the `displayName` can be customized by user, see #3192.
+    if (baseComponentName !== "") {
+        wrappedComponent.displayName = baseComponentName;
+    }
+    // Support legacy context: `contextTypes` must be applied before `memo`
+    if (baseComponent.contextTypes) {
+        wrappedComponent.contextTypes = baseComponent.contextTypes;
+    }
+    // memo; we are not interested in deep updates
+    // in props; we assume that if deep objects are changed,
+    // this is in observables, which would have been tracked anyway
+    var memoComponent;
+    if (realOptions.forwardRef) {
+        // we have to use forwardRef here because:
+        // 1. it cannot go before memo, only after it
+        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+        //    since it wouldn't be a callable function anymore
+        memoComponent = memo(forwardRef(wrappedComponent));
+    }
+    else {
+        memoComponent = memo(wrappedComponent);
+    }
+    copyStaticProperties(baseComponent, memoComponent);
+    if ("production" !== process.env.NODE_ENV) {
+        Object.defineProperty(memoComponent, "contextTypes", {
+            set: function () {
+                var _a;
+                throw new Error("[mobx-react-lite] `".concat(this.displayName || ((_a = this.type) === null || _a === void 0 ? void 0 : _a.displayName) || "Component", ".contextTypes` must be set before applying `observer`."));
+            }
+        });
+    }
+    return memoComponent;
+}
+// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+var hoistBlackList = {
+    $$typeof: true,
+    render: true,
+    compare: true,
+    type: true,
+    // Don't redefine `displayName`,
+    // it's defined as getter-setter pair on `memo` (see #3192).
+    displayName: true
+};
+function copyStaticProperties(base, target) {
+    Object.keys(base).forEach(function (key) {
+        if (!hoistBlackList[key]) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+        }
+    });
+}
+//# sourceMappingURL=observer.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/observer.js.map b/node_modules/mobx-react-lite/es/observer.js.map
new file mode 100644
index 0000000..7b9a4e5
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/observer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAExC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAmC3C,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CACpB,aAAiF,EACjF,OAA0B;IAE1B,sIAAsI;IACtI,IAAI,sBAAsB,EAAE,EAAE;QAC1B,OAAO,aAAa,CAAA;KACvB;IAED,IAAM,WAAW,cACb,UAAU,EAAE,KAAK,IACd,OAAO,CACb,CAAA;IAED,IAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAA;IAEzE,IAAM,gBAAgB,GAAG,UAAC,KAAQ,EAAE,GAAoB;QACpD,OAAO,WAAW,CAAC,cAAM,OAAA,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAzB,CAAyB,EAAE,iBAAiB,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,oDAAoD;IACpD,6DAA6D;IAC7D,IAAI,iBAAiB,KAAK,EAAE,EAAE;QAC1B,gBAAgB,CAAC,WAAW,GAAG,iBAAiB,CAAA;KACnD;IAED,uEAAuE;IACvE,IAAK,aAAqB,CAAC,YAAY,EAAE;QACrC,gBAAgB,CAAC,YAAY,GAAI,aAAqB,CAAC,YAAY,CAAA;KACtE;IAED,8CAA8C;IAC9C,wDAAwD;IACxD,+DAA+D;IAC/D,IAAI,aAAa,CAAA;IACjB,IAAI,WAAW,CAAC,UAAU,EAAE;QACxB,0CAA0C;QAC1C,6CAA6C;QAC7C,wGAAwG;QACxG,sDAAsD;QACtD,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAA;KACrD;SAAM;QACH,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA;KACzC;IAED,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IAElD,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,cAAc,EAAE;YACjD,GAAG;;gBACC,MAAM,IAAI,KAAK,CACX,6BACI,IAAI,CAAC,WAAW,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,CAAA,IAAI,WAAW,2DACF,CAC9D,CAAA;YACL,CAAC;SACJ,CAAC,CAAA;KACL;IAED,OAAO,aAAa,CAAA;AACxB,CAAC;AAED,wFAAwF;AACxF,IAAM,cAAc,GAAQ;IACxB,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,gCAAgC;IAChC,4DAA4D;IAC5D,WAAW,EAAE,IAAI;CACpB,CAAA;AAED,SAAS,oBAAoB,CAAC,IAAS,EAAE,MAAW;IAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;QACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAE,CAAC,CAAA;SAClF;IACL,CAAC,CAAC,CAAA;AACN,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/staticRendering.js b/node_modules/mobx-react-lite/es/staticRendering.js
new file mode 100644
index 0000000..00530b7
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/staticRendering.js
@@ -0,0 +1,8 @@
+var globalIsUsingStaticRendering = false;
+export function enableStaticRendering(enable) {
+    globalIsUsingStaticRendering = enable;
+}
+export function isUsingStaticRendering() {
+    return globalIsUsingStaticRendering;
+}
+//# sourceMappingURL=staticRendering.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/staticRendering.js.map b/node_modules/mobx-react-lite/es/staticRendering.js.map
new file mode 100644
index 0000000..ae81568
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/staticRendering.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"staticRendering.js","sourceRoot":"","sources":["../src/staticRendering.ts"],"names":[],"mappings":"AAAA,IAAI,4BAA4B,GAAG,KAAK,CAAA;AAExC,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACjD,4BAA4B,GAAG,MAAM,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,sBAAsB;IAClC,OAAO,4BAA4B,CAAA;AACvC,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useAsObservableSource.js b/node_modules/mobx-react-lite/es/useAsObservableSource.js
new file mode 100644
index 0000000..389c731
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useAsObservableSource.js
@@ -0,0 +1,29 @@
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+import { useDeprecated } from "./utils/utils";
+import { observable, runInAction } from "mobx";
+import { useState } from "react";
+export function useAsObservableSource(current) {
+    if ("production" !== process.env.NODE_ENV)
+        useDeprecated("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+    var _a = __read(useState(function () { return observable(current, {}, { deep: false }); }), 1), res = _a[0];
+    runInAction(function () {
+        Object.assign(res, current);
+    });
+    return res;
+}
+//# sourceMappingURL=useAsObservableSource.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useAsObservableSource.js.map b/node_modules/mobx-react-lite/es/useAsObservableSource.js.map
new file mode 100644
index 0000000..d1da2df
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useAsObservableSource.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useAsObservableSource.js","sourceRoot":"","sources":["../src/useAsObservableSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CAAyB,OAAgB;IAC1E,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ;QACrC,aAAa,CACT,4OAA4O,CAC/O,CAAA;IACC,IAAA,KAAA,OAAQ,QAAQ,CAAC,cAAM,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAxC,CAAwC,CAAC,IAAA,EAA/D,GAAG,QAA4D,CAAA;IACtE,WAAW,CAAC;QACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACd,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useLocalObservable.js b/node_modules/mobx-react-lite/es/useLocalObservable.js
new file mode 100644
index 0000000..fcb1dbe
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useLocalObservable.js
@@ -0,0 +1,6 @@
+import { observable } from "mobx";
+import { useState } from "react";
+export function useLocalObservable(initializer, annotations) {
+    return useState(function () { return observable(initializer(), annotations, { autoBind: true }); })[0];
+}
+//# sourceMappingURL=useLocalObservable.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useLocalObservable.js.map b/node_modules/mobx-react-lite/es/useLocalObservable.js.map
new file mode 100644
index 0000000..f221a41
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useLocalObservable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useLocalObservable.js","sourceRoot":"","sources":["../src/useLocalObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,UAAU,kBAAkB,CAC9B,WAAyB,EACzB,WAA2C;IAE3C,OAAO,QAAQ,CAAC,cAAM,OAAA,UAAU,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAA1D,CAA0D,CAAC,CAAC,CAAC,CAAC,CAAA;AACxF,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useLocalStore.js b/node_modules/mobx-react-lite/es/useLocalStore.js
new file mode 100644
index 0000000..2820ac5
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useLocalStore.js
@@ -0,0 +1,11 @@
+import { observable } from "mobx";
+import { useState } from "react";
+import { useDeprecated } from "./utils/utils";
+import { useAsObservableSource } from "./useAsObservableSource";
+export function useLocalStore(initializer, current) {
+    if ("production" !== process.env.NODE_ENV)
+        useDeprecated("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+    var source = current && useAsObservableSource(current);
+    return useState(function () { return observable(initializer(source), undefined, { autoBind: true }); })[0];
+}
+//# sourceMappingURL=useLocalStore.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useLocalStore.js.map b/node_modules/mobx-react-lite/es/useLocalStore.js.map
new file mode 100644
index 0000000..3edaf79
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useLocalStore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useLocalStore.js","sourceRoot":"","sources":["../src/useLocalStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAO/D,MAAM,UAAU,aAAa,CACzB,WAAyC,EACzC,OAAiB;IAEjB,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ;QACrC,aAAa,CACT,oFAAoF,CACvF,CAAA;IACL,IAAM,MAAM,GAAG,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,cAAM,OAAA,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAA9D,CAA8D,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5F,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useObserver.js b/node_modules/mobx-react-lite/es/useObserver.js
new file mode 100644
index 0000000..e48eb0a
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useObserver.js
@@ -0,0 +1,126 @@
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+import { Reaction } from "mobx";
+import React from "react";
+import { printDebugValue } from "./utils/printDebugValue";
+import { addReactionToTrack, recordReactionAsCommitted } from "./utils/reactionCleanupTracking";
+import { isUsingStaticRendering } from "./staticRendering";
+function observerComponentNameFor(baseComponentName) {
+    return "observer".concat(baseComponentName);
+}
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+var ObjectToBeRetainedByReact = /** @class */ (function () {
+    function ObjectToBeRetainedByReact() {
+    }
+    return ObjectToBeRetainedByReact;
+}());
+function objectToBeRetainedByReactFactory() {
+    return new ObjectToBeRetainedByReact();
+}
+export function useObserver(fn, baseComponentName) {
+    if (baseComponentName === void 0) { baseComponentName = "observed"; }
+    if (isUsingStaticRendering()) {
+        return fn();
+    }
+    var _a = __read(React.useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0];
+    // Force update, see #2982
+    var _b = __read(React.useState(), 2), setState = _b[1];
+    var forceUpdate = function () { return setState([]); };
+    // StrictMode/ConcurrentMode/Suspense may mean that our component is
+    // rendered and abandoned multiple times, so we need to track leaked
+    // Reactions.
+    var reactionTrackingRef = React.useRef(null);
+    if (!reactionTrackingRef.current) {
+        // First render for this component (or first time since a previous
+        // reaction from an abandoned render was disposed).
+        var newReaction = new Reaction(observerComponentNameFor(baseComponentName), function () {
+            // Observable has changed, meaning we want to re-render
+            // BUT if we're a component that hasn't yet got to the useEffect()
+            // stage, we might be a component that _started_ to render, but
+            // got dropped, and we don't want to make state changes then.
+            // (It triggers warnings in StrictMode, for a start.)
+            if (trackingData_1.mounted) {
+                // We have reached useEffect(), so we're mounted, and can trigger an update
+                forceUpdate();
+            }
+            else {
+                // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+                // when (and if) useEffect() arrives.
+                trackingData_1.changedBeforeMount = true;
+            }
+        });
+        var trackingData_1 = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
+    }
+    var reaction = reactionTrackingRef.current.reaction;
+    React.useDebugValue(reaction, printDebugValue);
+    React.useEffect(function () {
+        // Called on first mount only
+        recordReactionAsCommitted(reactionTrackingRef);
+        if (reactionTrackingRef.current) {
+            // Great. We've already got our reaction from our render;
+            // all we need to do is to record that it's now mounted,
+            // to allow future observable changes to trigger re-renders
+            reactionTrackingRef.current.mounted = true;
+            // Got a change before first mount, force an update
+            if (reactionTrackingRef.current.changedBeforeMount) {
+                reactionTrackingRef.current.changedBeforeMount = false;
+                forceUpdate();
+            }
+        }
+        else {
+            // The reaction we set up in our render has been disposed.
+            // This can be due to bad timings of renderings, e.g. our
+            // component was paused for a _very_ long time, and our
+            // reaction got cleaned up
+            // Re-create the reaction
+            reactionTrackingRef.current = {
+                reaction: new Reaction(observerComponentNameFor(baseComponentName), function () {
+                    // We've definitely already been mounted at this point
+                    forceUpdate();
+                }),
+                mounted: true,
+                changedBeforeMount: false,
+                cleanAt: Infinity
+            };
+            forceUpdate();
+        }
+        return function () {
+            reactionTrackingRef.current.reaction.dispose();
+            reactionTrackingRef.current = null;
+        };
+    }, []);
+    // render the original component, but have the
+    // reaction track the observables, so that rendering
+    // can be invalidated (see above) once a dependency changes
+    var rendering;
+    var exception;
+    reaction.track(function () {
+        try {
+            rendering = fn();
+        }
+        catch (e) {
+            exception = e;
+        }
+    });
+    if (exception) {
+        throw exception; // re-throw any exceptions caught during rendering
+    }
+    return rendering;
+}
+//# sourceMappingURL=useObserver.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/useObserver.js.map b/node_modules/mobx-react-lite/es/useObserver.js.map
new file mode 100644
index 0000000..e930cd4
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/useObserver.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../src/useObserver.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js b/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js
new file mode 100644
index 0000000..4f0d205
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js
@@ -0,0 +1,3 @@
+var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+export { FinalizationRegistryLocal as FinalizationRegistry };
+//# sourceMappingURL=FinalizationRegistryWrapper.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js.map b/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js.map
new file mode 100644
index 0000000..b8eec2e
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/FinalizationRegistryWrapper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FinalizationRegistryWrapper.js","sourceRoot":"","sources":["../../src/utils/FinalizationRegistryWrapper.ts"],"names":[],"mappings":"AAQA,IAAM,yBAAyB,GAC3B,OAAO,oBAAoB,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAA;AAElF,OAAO,EAAE,yBAAyB,IAAI,oBAAoB,EAAE,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/assertEnvironment.js b/node_modules/mobx-react-lite/es/utils/assertEnvironment.js
new file mode 100644
index 0000000..a55a7db
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/assertEnvironment.js
@@ -0,0 +1,9 @@
+import { makeObservable } from "mobx";
+import { useState } from "react";
+if (!useState) {
+    throw new Error("mobx-react-lite requires React with Hooks support");
+}
+if (!makeObservable) {
+    throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+}
+//# sourceMappingURL=assertEnvironment.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/assertEnvironment.js.map b/node_modules/mobx-react-lite/es/utils/assertEnvironment.js.map
new file mode 100644
index 0000000..4f91755
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/assertEnvironment.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"assertEnvironment.js","sourceRoot":"","sources":["../../src/utils/assertEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,IAAI,CAAC,QAAQ,EAAE;IACX,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;CACvE;AACD,IAAI,CAAC,cAAc,EAAE;IACjB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;CACxF"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js b/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
new file mode 100644
index 0000000..14d3dd8
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
@@ -0,0 +1,38 @@
+import { createTrackingData } from "./reactionCleanupTrackingCommon";
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+export function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+    var cleanupTokenToReactionTrackingMap = new Map();
+    var globalCleanupTokensCounter = 1;
+    var registry = new FinalizationRegistry(function cleanupFunction(token) {
+        var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+        if (trackedReaction) {
+            trackedReaction.reaction.dispose();
+            cleanupTokenToReactionTrackingMap.delete(token);
+        }
+    });
+    return {
+        addReactionToTrack: function (reactionTrackingRef, reaction, objectRetainedByReact) {
+            var token = globalCleanupTokensCounter++;
+            registry.register(objectRetainedByReact, token, reactionTrackingRef);
+            reactionTrackingRef.current = createTrackingData(reaction);
+            reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+            return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: function (reactionRef) {
+            registry.unregister(reactionRef);
+            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+                cleanupTokenToReactionTrackingMap.delete(reactionRef.current.finalizationRegistryCleanupToken);
+            }
+        },
+        forceCleanupTimerToRunNowForTests: function () {
+            // When FinalizationRegistry in use, this this is no-op
+        },
+        resetCleanupScheduleForTests: function () {
+            // When FinalizationRegistry in use, this this is no-op
+        }
+    };
+}
+//# sourceMappingURL=createReactionCleanupTrackingUsingFinalizationRegister.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map b/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
new file mode 100644
index 0000000..a577ac3
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createReactionCleanupTrackingUsingFinalizationRegister.js","sourceRoot":"","sources":["../../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts"],"names":[],"mappings":"AAEA,OAAO,EAGH,kBAAkB,EACrB,MAAM,iCAAiC,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,sDAAsD,CAClE,oBAA4E;IAE5E,IAAM,iCAAiC,GAAG,IAAI,GAAG,EAA6B,CAAA;IAC9E,IAAI,0BAA0B,GAAG,CAAC,CAAA;IAElC,IAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,SAAS,eAAe,CAAC,KAAa;QAC5E,IAAM,eAAe,GAAG,iCAAiC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpE,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAClC,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SAClD;IACL,CAAC,CAAC,CAAA;IAEF,OAAO;QACH,kBAAkB,EAAlB,UACI,mBAAqE,EACrE,QAAkB,EAClB,qBAA6B;YAE7B,IAAM,KAAK,GAAG,0BAA0B,EAAE,CAAA;YAE1C,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAA;YACpE,mBAAmB,CAAC,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;YAC1D,mBAAmB,CAAC,OAAO,CAAC,gCAAgC,GAAG,KAAK,CAAA;YACpE,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAEzE,OAAO,mBAAmB,CAAC,OAAO,CAAA;QACtC,CAAC;QACD,yBAAyB,EAAzB,UAA0B,WAA6D;YACnF,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAEhC,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,gCAAgC,EAAE;gBAC7E,iCAAiC,CAAC,MAAM,CACpC,WAAW,CAAC,OAAO,CAAC,gCAAgC,CACvD,CAAA;aACJ;QACL,CAAC;QACD,iCAAiC;YAC7B,uDAAuD;QAC3D,CAAC;QACD,4BAA4B;YACxB,uDAAuD;QAC3D,CAAC;KACJ,CAAA;AACL,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js b/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js
new file mode 100644
index 0000000..809ae21
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js
@@ -0,0 +1,118 @@
+var __values = (this && this.__values) || function(o) {
+    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+    if (m) return m.call(o);
+    if (o && typeof o.length === "number") return {
+        next: function () {
+            if (o && i >= o.length) o = void 0;
+            return { value: o && o[i++], done: !o };
+        }
+    };
+    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+};
+import { CLEANUP_TIMER_LOOP_MILLIS, createTrackingData } from "./reactionCleanupTrackingCommon";
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+export function createTimerBasedReactionCleanupTracking() {
+    /**
+     * Reactions created by components that have yet to be fully mounted.
+     */
+    var uncommittedReactionRefs = new Set();
+    /**
+     * Latest 'uncommitted reactions' cleanup timer handle.
+     */
+    var reactionCleanupHandle;
+    /* istanbul ignore next */
+    /**
+     * Only to be used by test functions; do not export outside of mobx-react-lite
+     */
+    function forceCleanupTimerToRunNowForTests() {
+        // This allows us to control the execution of the cleanup timer
+        // to force it to run at awkward times in unit tests.
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle);
+            cleanUncommittedReactions();
+        }
+    }
+    /* istanbul ignore next */
+    function resetCleanupScheduleForTests() {
+        var e_1, _a;
+        if (uncommittedReactionRefs.size > 0) {
+            try {
+                for (var uncommittedReactionRefs_1 = __values(uncommittedReactionRefs), uncommittedReactionRefs_1_1 = uncommittedReactionRefs_1.next(); !uncommittedReactionRefs_1_1.done; uncommittedReactionRefs_1_1 = uncommittedReactionRefs_1.next()) {
+                    var ref = uncommittedReactionRefs_1_1.value;
+                    var tracking = ref.current;
+                    if (tracking) {
+                        tracking.reaction.dispose();
+                        ref.current = null;
+                    }
+                }
+            }
+            catch (e_1_1) { e_1 = { error: e_1_1 }; }
+            finally {
+                try {
+                    if (uncommittedReactionRefs_1_1 && !uncommittedReactionRefs_1_1.done && (_a = uncommittedReactionRefs_1.return)) _a.call(uncommittedReactionRefs_1);
+                }
+                finally { if (e_1) throw e_1.error; }
+            }
+            uncommittedReactionRefs.clear();
+        }
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle);
+            reactionCleanupHandle = undefined;
+        }
+    }
+    function ensureCleanupTimerRunning() {
+        if (reactionCleanupHandle === undefined) {
+            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS);
+        }
+    }
+    function scheduleCleanupOfReactionIfLeaked(ref) {
+        uncommittedReactionRefs.add(ref);
+        ensureCleanupTimerRunning();
+    }
+    function recordReactionAsCommitted(reactionRef) {
+        uncommittedReactionRefs.delete(reactionRef);
+    }
+    /**
+     * Run by the cleanup timer to dispose any outstanding reactions
+     */
+    function cleanUncommittedReactions() {
+        reactionCleanupHandle = undefined;
+        // Loop through all the candidate leaked reactions; those older
+        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+        var now = Date.now();
+        uncommittedReactionRefs.forEach(function (ref) {
+            var tracking = ref.current;
+            if (tracking) {
+                if (now >= tracking.cleanAt) {
+                    // It's time to tidy up this leaked reaction.
+                    tracking.reaction.dispose();
+                    ref.current = null;
+                    uncommittedReactionRefs.delete(ref);
+                }
+            }
+        });
+        if (uncommittedReactionRefs.size > 0) {
+            // We've just finished a round of cleanups but there are still
+            // some leak candidates outstanding.
+            ensureCleanupTimerRunning();
+        }
+    }
+    return {
+        addReactionToTrack: function (reactionTrackingRef, reaction, 
+        /**
+         * On timer based implementation we don't really need this object,
+         * but we keep the same api
+         */
+        objectRetainedByReact) {
+            reactionTrackingRef.current = createTrackingData(reaction);
+            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+            return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: recordReactionAsCommitted,
+        forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+        resetCleanupScheduleForTests: resetCleanupScheduleForTests
+    };
+}
+//# sourceMappingURL=createTimerBasedReactionCleanupTracking.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js.map b/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js.map
new file mode 100644
index 0000000..0bbd75e
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/createTimerBasedReactionCleanupTracking.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createTimerBasedReactionCleanupTracking.js","sourceRoot":"","sources":["../../src/utils/createTimerBasedReactionCleanupTracking.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAGH,yBAAyB,EACzB,kBAAkB,EACrB,MAAM,iCAAiC,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,uCAAuC;IACnD;;OAEG;IACH,IAAM,uBAAuB,GAA0D,IAAI,GAAG,EAAE,CAAA;IAEhG;;OAEG;IACH,IAAI,qBAAgE,CAAA;IAEpE,0BAA0B;IAC1B;;OAEG;IACH,SAAS,iCAAiC;QACtC,+DAA+D;QAC/D,qDAAqD;QACrD,IAAI,qBAAqB,EAAE;YACvB,YAAY,CAAC,qBAAqB,CAAC,CAAA;YACnC,yBAAyB,EAAE,CAAA;SAC9B;IACL,CAAC;IAED,0BAA0B;IAC1B,SAAS,4BAA4B;;QACjC,IAAI,uBAAuB,CAAC,IAAI,GAAG,CAAC,EAAE;;gBAClC,KAAkB,IAAA,4BAAA,SAAA,uBAAuB,CAAA,gEAAA,qGAAE;oBAAtC,IAAM,GAAG,oCAAA;oBACV,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;oBAC5B,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;wBAC3B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;qBACrB;iBACJ;;;;;;;;;YACD,uBAAuB,CAAC,KAAK,EAAE,CAAA;SAClC;QAED,IAAI,qBAAqB,EAAE;YACvB,YAAY,CAAC,qBAAqB,CAAC,CAAA;YACnC,qBAAqB,GAAG,SAAS,CAAA;SACpC;IACL,CAAC;IAED,SAAS,yBAAyB;QAC9B,IAAI,qBAAqB,KAAK,SAAS,EAAE;YACrC,qBAAqB,GAAG,UAAU,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAA;SAC3F;IACL,CAAC;IAED,SAAS,iCAAiC,CACtC,GAAqD;QAErD,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEhC,yBAAyB,EAAE,CAAA;IAC/B,CAAC;IAED,SAAS,yBAAyB,CAC9B,WAA6D;QAE7D,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,SAAS,yBAAyB;QAC9B,qBAAqB,GAAG,SAAS,CAAA;QAEjC,+DAA+D;QAC/D,yDAAyD;QAEzD,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,uBAAuB,CAAC,OAAO,CAAC,UAAA,GAAG;YAC/B,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;YAC5B,IAAI,QAAQ,EAAE;gBACV,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACzB,6CAA6C;oBAC7C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;oBAC3B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;oBAClB,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;iBACtC;aACJ;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,uBAAuB,CAAC,IAAI,GAAG,CAAC,EAAE;YAClC,8DAA8D;YAC9D,oCAAoC;YACpC,yBAAyB,EAAE,CAAA;SAC9B;IACL,CAAC;IAED,OAAO;QACH,kBAAkB,EAAlB,UACI,mBAAqE,EACrE,QAAkB;QAClB;;;WAGG;QACH,qBAA8B;YAE9B,mBAAmB,CAAC,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;YAC1D,iCAAiC,CAAC,mBAAmB,CAAC,CAAA;YACtD,OAAO,mBAAmB,CAAC,OAAO,CAAA;QACtC,CAAC;QACD,yBAAyB,2BAAA;QACzB,iCAAiC,mCAAA;QACjC,4BAA4B,8BAAA;KAC/B,CAAA;AACL,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/observerBatching.js b/node_modules/mobx-react-lite/es/utils/observerBatching.js
new file mode 100644
index 0000000..5d0d3da
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/observerBatching.js
@@ -0,0 +1,20 @@
+import { configure } from "mobx";
+export function defaultNoopBatch(callback) {
+    callback();
+}
+export function observerBatching(reactionScheduler) {
+    if (!reactionScheduler) {
+        reactionScheduler = defaultNoopBatch;
+        if ("production" !== process.env.NODE_ENV) {
+            console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+        }
+    }
+    configure({ reactionScheduler: reactionScheduler });
+}
+export var isObserverBatched = function () {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn("[MobX] Deprecated");
+    }
+    return true;
+};
+//# sourceMappingURL=observerBatching.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/observerBatching.js.map b/node_modules/mobx-react-lite/es/utils/observerBatching.js.map
new file mode 100644
index 0000000..88bf897
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/observerBatching.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"observerBatching.js","sourceRoot":"","sources":["../../src/utils/observerBatching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEhC,MAAM,UAAU,gBAAgB,CAAC,QAAoB;IACjD,QAAQ,EAAE,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,iBAAsB;IACnD,IAAI,CAAC,iBAAiB,EAAE;QACpB,iBAAiB,GAAG,gBAAgB,CAAA;QACpC,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvC,OAAO,CAAC,IAAI,CACR,6EAA6E,CAChF,CAAA;SACJ;KACJ;IACD,SAAS,CAAC,EAAE,iBAAiB,mBAAA,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,IAAM,iBAAiB,GAAG;IAC7B,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;KACpC;IAED,OAAO,IAAI,CAAA;AACf,CAAC,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/printDebugValue.js b/node_modules/mobx-react-lite/es/utils/printDebugValue.js
new file mode 100644
index 0000000..c7637bc
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/printDebugValue.js
@@ -0,0 +1,5 @@
+import { getDependencyTree } from "mobx";
+export function printDebugValue(v) {
+    return getDependencyTree(v);
+}
+//# sourceMappingURL=printDebugValue.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/printDebugValue.js.map b/node_modules/mobx-react-lite/es/utils/printDebugValue.js.map
new file mode 100644
index 0000000..5a7b5d7
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/printDebugValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"printDebugValue.js","sourceRoot":"","sources":["../../src/utils/printDebugValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAY,MAAM,MAAM,CAAA;AAElD,MAAM,UAAU,eAAe,CAAC,CAAW;IACvC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAC/B,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js
new file mode 100644
index 0000000..42ba816
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js
@@ -0,0 +1,2 @@
+export { unstable_batchedUpdates } from "react-dom";
+//# sourceMappingURL=reactBatchedUpdates.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js.map b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js.map
new file mode 100644
index 0000000..ce96b70
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactBatchedUpdates.js","sourceRoot":"","sources":["../../src/utils/reactBatchedUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js
new file mode 100644
index 0000000..f0674f0
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js
@@ -0,0 +1,3 @@
+// @ts-ignore
+export { unstable_batchedUpdates } from "react-native";
+//# sourceMappingURL=reactBatchedUpdates.native.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js.map b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js.map
new file mode 100644
index 0000000..6c3c9d1
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactBatchedUpdates.native.js","sourceRoot":"","sources":["../../src/utils/reactBatchedUpdates.native.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js b/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js
new file mode 100644
index 0000000..7f1aa23
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js
@@ -0,0 +1,8 @@
+import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from "./FinalizationRegistryWrapper";
+import { createReactionCleanupTrackingUsingFinalizationRegister } from "./createReactionCleanupTrackingUsingFinalizationRegister";
+import { createTimerBasedReactionCleanupTracking } from "./createTimerBasedReactionCleanupTracking";
+var _a = FinalizationRegistryMaybeUndefined
+    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)
+    : createTimerBasedReactionCleanupTracking(), addReactionToTrack = _a.addReactionToTrack, recordReactionAsCommitted = _a.recordReactionAsCommitted, resetCleanupScheduleForTests = _a.resetCleanupScheduleForTests, forceCleanupTimerToRunNowForTests = _a.forceCleanupTimerToRunNowForTests;
+export { addReactionToTrack, recordReactionAsCommitted, resetCleanupScheduleForTests, forceCleanupTimerToRunNowForTests };
+//# sourceMappingURL=reactionCleanupTracking.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js.map b/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js.map
new file mode 100644
index 0000000..e5a21b4
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactionCleanupTracking.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactionCleanupTracking.js","sourceRoot":"","sources":["../../src/utils/reactionCleanupTracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,kCAAkC,EAAE,MAAM,+BAA+B,CAAA;AAC1G,OAAO,EAAE,sDAAsD,EAAE,MAAM,0DAA0D,CAAA;AACjI,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAA;AAG7F,IAAA,KAKF,kCAAkC;IAClC,CAAC,CAAC,sDAAsD,CAAC,kCAAkC,CAAC;IAC5F,CAAC,CAAC,uCAAuC,EAAE,EAN3C,kBAAkB,wBAAA,EAClB,yBAAyB,+BAAA,EACzB,4BAA4B,kCAAA,EAC5B,iCAAiC,uCAGU,CAAA;AAE/C,OAAO,EACH,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,iCAAiC,EACpC,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js b/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js
new file mode 100644
index 0000000..a8b0e51
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js
@@ -0,0 +1,21 @@
+export function createTrackingData(reaction) {
+    var trackingData = {
+        reaction: reaction,
+        mounted: false,
+        changedBeforeMount: false,
+        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+    };
+    return trackingData;
+}
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+export var CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+export var CLEANUP_TIMER_LOOP_MILLIS = 10000;
+//# sourceMappingURL=reactionCleanupTrackingCommon.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js.map b/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js.map
new file mode 100644
index 0000000..05364ca
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/reactionCleanupTrackingCommon.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactionCleanupTrackingCommon.js","sourceRoot":"","sources":["../../src/utils/reactionCleanupTrackingCommon.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACjD,IAAM,YAAY,GAAsB;QACpC,QAAQ,UAAA;QACR,OAAO,EAAE,KAAK;QACd,kBAAkB,EAAE,KAAK;QACzB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,qCAAqC;KAC9D,CAAA;IACD,OAAO,YAAY,CAAA;AACvB,CAAC;AAkDD;;;;;GAKG;AACH,MAAM,CAAC,IAAM,qCAAqC,GAAG,KAAM,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAAG,KAAM,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/utils.js b/node_modules/mobx-react-lite/es/utils/utils.js
new file mode 100644
index 0000000..4bfaf7f
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/utils.js
@@ -0,0 +1,8 @@
+var deprecatedMessages = [];
+export function useDeprecated(msg) {
+    if (!deprecatedMessages.includes(msg)) {
+        deprecatedMessages.push(msg);
+        console.warn(msg);
+    }
+}
+//# sourceMappingURL=utils.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/es/utils/utils.js.map b/node_modules/mobx-react-lite/es/utils/utils.js.map
new file mode 100644
index 0000000..f799063
--- /dev/null
+++ b/node_modules/mobx-react-lite/es/utils/utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,IAAM,kBAAkB,GAAa,EAAE,CAAA;AAEvC,MAAM,UAAU,aAAa,CAAC,GAAW;IACrC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACnC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACpB;AACL,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/ObserverComponent.js b/node_modules/mobx-react-lite/lib/ObserverComponent.js
new file mode 100644
index 0000000..7b07dae
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/ObserverComponent.js
@@ -0,0 +1,40 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Observer = void 0;
+var useObserver_1 = require("./useObserver");
+function ObserverComponent(_a) {
+    var children = _a.children, render = _a.render;
+    var component = children || render;
+    if (typeof component !== "function") {
+        return null;
+    }
+    return (0, useObserver_1.useObserver)(component);
+}
+exports.Observer = ObserverComponent;
+if ("production" !== process.env.NODE_ENV) {
+    ObserverComponent.propTypes = {
+        children: ObserverPropsCheck,
+        render: ObserverPropsCheck
+    };
+}
+ObserverComponent.displayName = "Observer";
+function ObserverPropsCheck(props, key, componentName, location, propFullName) {
+    var extraKey = key === "children" ? "render" : "children";
+    var hasProp = typeof props[key] === "function";
+    var hasExtraProp = typeof props[extraKey] === "function";
+    if (hasProp && hasExtraProp) {
+        return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName);
+    }
+    if (hasProp || hasExtraProp) {
+        return null;
+    }
+    return new Error("Invalid prop `" +
+        propFullName +
+        "` of type `" +
+        typeof props[key] +
+        "` supplied to" +
+        " `" +
+        componentName +
+        "`, expected `function`.");
+}
+//# sourceMappingURL=ObserverComponent.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/ObserverComponent.js.map b/node_modules/mobx-react-lite/lib/ObserverComponent.js.map
new file mode 100644
index 0000000..2f66651
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/ObserverComponent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ObserverComponent.js","sourceRoot":"","sources":["../src/ObserverComponent.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAO3C,SAAS,iBAAiB,CAAC,EAAoC;QAAlC,QAAQ,cAAA,EAAE,MAAM,YAAA;IACzC,IAAM,SAAS,GAAG,QAAQ,IAAI,MAAM,CAAA;IACpC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;QACjC,OAAO,IAAI,CAAA;KACd;IACD,OAAO,IAAA,yBAAW,EAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAS6B,qCAAQ;AARtC,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;IACvC,iBAAiB,CAAC,SAAS,GAAG;QAC1B,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,kBAAkB;KAC7B,CAAA;CACJ;AACD,iBAAiB,CAAC,WAAW,GAAG,UAAU,CAAA;AAI1C,SAAS,kBAAkB,CACvB,KAA2B,EAC3B,GAAW,EACX,aAAqB,EACrB,QAAa,EACb,YAAoB;IAEpB,IAAM,QAAQ,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAA;IAC3D,IAAM,OAAO,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,CAAA;IAChD,IAAM,YAAY,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAA;IAC1D,IAAI,OAAO,IAAI,YAAY,EAAE;QACzB,OAAO,IAAI,KAAK,CACZ,oEAAoE,GAAG,aAAa,CACvF,CAAA;KACJ;IAED,IAAI,OAAO,IAAI,YAAY,EAAE;QACzB,OAAO,IAAI,CAAA;KACd;IACD,OAAO,IAAI,KAAK,CACZ,gBAAgB;QACZ,YAAY;QACZ,aAAa;QACb,OAAO,KAAK,CAAC,GAAG,CAAC;QACjB,eAAe;QACf,IAAI;QACJ,aAAa;QACb,yBAAyB,CAChC,CAAA;AACL,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/index.js b/node_modules/mobx-react-lite/lib/index.js
new file mode 100644
index 0000000..9cc77b5
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/index.js
@@ -0,0 +1,44 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useStaticRendering = exports.observerBatching = exports.isObserverBatched = exports.useObserver = exports.clearTimers = exports.useAsObservableSource = exports.useLocalStore = exports.useLocalObservable = exports.Observer = exports.observer = exports.enableStaticRendering = exports.isUsingStaticRendering = void 0;
+require("./utils/assertEnvironment");
+var reactBatchedUpdates_1 = require("./utils/reactBatchedUpdates");
+var observerBatching_1 = require("./utils/observerBatching");
+var utils_1 = require("./utils/utils");
+var useObserver_1 = require("./useObserver");
+var staticRendering_1 = require("./staticRendering");
+(0, observerBatching_1.observerBatching)(reactBatchedUpdates_1.unstable_batchedUpdates);
+var staticRendering_2 = require("./staticRendering");
+Object.defineProperty(exports, "isUsingStaticRendering", { enumerable: true, get: function () { return staticRendering_2.isUsingStaticRendering; } });
+Object.defineProperty(exports, "enableStaticRendering", { enumerable: true, get: function () { return staticRendering_2.enableStaticRendering; } });
+var observer_1 = require("./observer");
+Object.defineProperty(exports, "observer", { enumerable: true, get: function () { return observer_1.observer; } });
+var ObserverComponent_1 = require("./ObserverComponent");
+Object.defineProperty(exports, "Observer", { enumerable: true, get: function () { return ObserverComponent_1.Observer; } });
+var useLocalObservable_1 = require("./useLocalObservable");
+Object.defineProperty(exports, "useLocalObservable", { enumerable: true, get: function () { return useLocalObservable_1.useLocalObservable; } });
+var useLocalStore_1 = require("./useLocalStore");
+Object.defineProperty(exports, "useLocalStore", { enumerable: true, get: function () { return useLocalStore_1.useLocalStore; } });
+var useAsObservableSource_1 = require("./useAsObservableSource");
+Object.defineProperty(exports, "useAsObservableSource", { enumerable: true, get: function () { return useAsObservableSource_1.useAsObservableSource; } });
+var reactionCleanupTracking_1 = require("./utils/reactionCleanupTracking");
+Object.defineProperty(exports, "clearTimers", { enumerable: true, get: function () { return reactionCleanupTracking_1.resetCleanupScheduleForTests; } });
+function useObserver(fn, baseComponentName) {
+    if (baseComponentName === void 0) { baseComponentName = "observed"; }
+    if ("production" !== process.env.NODE_ENV) {
+        (0, utils_1.useDeprecated)("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.");
+    }
+    return (0, useObserver_1.useObserver)(fn, baseComponentName);
+}
+exports.useObserver = useObserver;
+var observerBatching_2 = require("./utils/observerBatching");
+Object.defineProperty(exports, "isObserverBatched", { enumerable: true, get: function () { return observerBatching_2.isObserverBatched; } });
+Object.defineProperty(exports, "observerBatching", { enumerable: true, get: function () { return observerBatching_2.observerBatching; } });
+function useStaticRendering(enable) {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead");
+    }
+    (0, staticRendering_1.enableStaticRendering)(enable);
+}
+exports.useStaticRendering = useStaticRendering;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/index.js.map b/node_modules/mobx-react-lite/lib/index.js.map
new file mode 100644
index 0000000..d02f57f
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAElC,mEAA8E;AAC9E,6DAA2D;AAC3D,uCAA6C;AAC7C,6CAAkE;AAClE,qDAAyD;AAEzD,IAAA,mCAAgB,EAAC,6CAAK,CAAC,CAAA;AAEvB,qDAAiF;AAAxE,yHAAA,sBAAsB,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AACtD,uCAAuD;AAA9C,oGAAA,QAAQ,OAAA;AACjB,yDAA8C;AAArC,6GAAA,QAAQ,OAAA;AACjB,2DAAyD;AAAhD,wHAAA,kBAAkB,OAAA;AAC3B,iDAA+C;AAAtC,8GAAA,aAAa,OAAA;AACtB,iEAA+D;AAAtD,8HAAA,qBAAqB,OAAA;AAC9B,2EAA6F;AAApF,sHAAA,4BAA4B,OAAe;AAEpD,SAAgB,WAAW,CAAI,EAAW,EAAE,iBAAsC;IAAtC,kCAAA,EAAA,8BAAsC;IAC9E,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,IAAA,qBAAa,EACT,yIAAyI,CAC5I,CAAA;KACJ;IACD,OAAO,IAAA,yBAAmB,EAAC,EAAE,EAAE,iBAAiB,CAAC,CAAA;AACrD,CAAC;AAPD,kCAOC;AAED,6DAA8E;AAArE,qHAAA,iBAAiB,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AAE5C,SAAgB,kBAAkB,CAAC,MAAe;IAC9C,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,OAAO,CAAC,IAAI,CACR,2FAA2F,CAC9F,CAAA;KACJ;IACD,IAAA,uCAAqB,EAAC,MAAM,CAAC,CAAA;AACjC,CAAC;AAPD,gDAOC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/observer.js b/node_modules/mobx-react-lite/lib/observer.js
new file mode 100644
index 0000000..02c5a0e
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/observer.js
@@ -0,0 +1,81 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.observer = void 0;
+var react_1 = require("react");
+var staticRendering_1 = require("./staticRendering");
+var useObserver_1 = require("./useObserver");
+// n.b. base case is not used for actual typings or exported in the typing files
+function observer(baseComponent, options) {
+    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+    if ((0, staticRendering_1.isUsingStaticRendering)()) {
+        return baseComponent;
+    }
+    var realOptions = __assign({ forwardRef: false }, options);
+    var baseComponentName = baseComponent.displayName || baseComponent.name;
+    var wrappedComponent = function (props, ref) {
+        return (0, useObserver_1.useObserver)(function () { return baseComponent(props, ref); }, baseComponentName);
+    };
+    // Don't set `displayName` for anonymous components,
+    // so the `displayName` can be customized by user, see #3192.
+    if (baseComponentName !== "") {
+        wrappedComponent.displayName = baseComponentName;
+    }
+    // Support legacy context: `contextTypes` must be applied before `memo`
+    if (baseComponent.contextTypes) {
+        wrappedComponent.contextTypes = baseComponent.contextTypes;
+    }
+    // memo; we are not interested in deep updates
+    // in props; we assume that if deep objects are changed,
+    // this is in observables, which would have been tracked anyway
+    var memoComponent;
+    if (realOptions.forwardRef) {
+        // we have to use forwardRef here because:
+        // 1. it cannot go before memo, only after it
+        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+        //    since it wouldn't be a callable function anymore
+        memoComponent = (0, react_1.memo)((0, react_1.forwardRef)(wrappedComponent));
+    }
+    else {
+        memoComponent = (0, react_1.memo)(wrappedComponent);
+    }
+    copyStaticProperties(baseComponent, memoComponent);
+    if ("production" !== process.env.NODE_ENV) {
+        Object.defineProperty(memoComponent, "contextTypes", {
+            set: function () {
+                var _a;
+                throw new Error("[mobx-react-lite] `".concat(this.displayName || ((_a = this.type) === null || _a === void 0 ? void 0 : _a.displayName) || "Component", ".contextTypes` must be set before applying `observer`."));
+            }
+        });
+    }
+    return memoComponent;
+}
+exports.observer = observer;
+// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+var hoistBlackList = {
+    $$typeof: true,
+    render: true,
+    compare: true,
+    type: true,
+    // Don't redefine `displayName`,
+    // it's defined as getter-setter pair on `memo` (see #3192).
+    displayName: true
+};
+function copyStaticProperties(base, target) {
+    Object.keys(base).forEach(function (key) {
+        if (!hoistBlackList[key]) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+        }
+    });
+}
+//# sourceMappingURL=observer.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/observer.js.map b/node_modules/mobx-react-lite/lib/observer.js.map
new file mode 100644
index 0000000..e503f76
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/observer.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,+BAAwC;AAExC,qDAA0D;AAC1D,6CAA2C;AAmC3C,gFAAgF;AAChF,SAAgB,QAAQ,CACpB,aAAiF,EACjF,OAA0B;IAE1B,sIAAsI;IACtI,IAAI,IAAA,wCAAsB,GAAE,EAAE;QAC1B,OAAO,aAAa,CAAA;KACvB;IAED,IAAM,WAAW,cACb,UAAU,EAAE,KAAK,IACd,OAAO,CACb,CAAA;IAED,IAAM,iBAAiB,GAAG,aAAa,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAA;IAEzE,IAAM,gBAAgB,GAAG,UAAC,KAAQ,EAAE,GAAoB;QACpD,OAAO,IAAA,yBAAW,EAAC,cAAM,OAAA,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAzB,CAAyB,EAAE,iBAAiB,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,oDAAoD;IACpD,6DAA6D;IAC7D,IAAI,iBAAiB,KAAK,EAAE,EAAE;QAC1B,gBAAgB,CAAC,WAAW,GAAG,iBAAiB,CAAA;KACnD;IAED,uEAAuE;IACvE,IAAK,aAAqB,CAAC,YAAY,EAAE;QACrC,gBAAgB,CAAC,YAAY,GAAI,aAAqB,CAAC,YAAY,CAAA;KACtE;IAED,8CAA8C;IAC9C,wDAAwD;IACxD,+DAA+D;IAC/D,IAAI,aAAa,CAAA;IACjB,IAAI,WAAW,CAAC,UAAU,EAAE;QACxB,0CAA0C;QAC1C,6CAA6C;QAC7C,wGAAwG;QACxG,sDAAsD;QACtD,aAAa,GAAG,IAAA,YAAI,EAAC,IAAA,kBAAU,EAAC,gBAAgB,CAAC,CAAC,CAAA;KACrD;SAAM;QACH,aAAa,GAAG,IAAA,YAAI,EAAC,gBAAgB,CAAC,CAAA;KACzC;IAED,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IAElD,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,cAAc,EAAE;YACjD,GAAG;;gBACC,MAAM,IAAI,KAAK,CACX,6BACI,IAAI,CAAC,WAAW,KAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,CAAA,IAAI,WAAW,2DACF,CAC9D,CAAA;YACL,CAAC;SACJ,CAAC,CAAA;KACL;IAED,OAAO,aAAa,CAAA;AACxB,CAAC;AA5DD,4BA4DC;AAED,wFAAwF;AACxF,IAAM,cAAc,GAAQ;IACxB,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,gCAAgC;IAChC,4DAA4D;IAC5D,WAAW,EAAE,IAAI;CACpB,CAAA;AAED,SAAS,oBAAoB,CAAC,IAAS,EAAE,MAAW;IAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;QACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAE,CAAC,CAAA;SAClF;IACL,CAAC,CAAC,CAAA;AACN,CAAC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/staticRendering.js b/node_modules/mobx-react-lite/lib/staticRendering.js
new file mode 100644
index 0000000..1ac98f0
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/staticRendering.js
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isUsingStaticRendering = exports.enableStaticRendering = void 0;
+var globalIsUsingStaticRendering = false;
+function enableStaticRendering(enable) {
+    globalIsUsingStaticRendering = enable;
+}
+exports.enableStaticRendering = enableStaticRendering;
+function isUsingStaticRendering() {
+    return globalIsUsingStaticRendering;
+}
+exports.isUsingStaticRendering = isUsingStaticRendering;
+//# sourceMappingURL=staticRendering.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/staticRendering.js.map b/node_modules/mobx-react-lite/lib/staticRendering.js.map
new file mode 100644
index 0000000..f0e64fc
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/staticRendering.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"staticRendering.js","sourceRoot":"","sources":["../src/staticRendering.ts"],"names":[],"mappings":";;;AAAA,IAAI,4BAA4B,GAAG,KAAK,CAAA;AAExC,SAAgB,qBAAqB,CAAC,MAAe;IACjD,4BAA4B,GAAG,MAAM,CAAA;AACzC,CAAC;AAFD,sDAEC;AAED,SAAgB,sBAAsB;IAClC,OAAO,4BAA4B,CAAA;AACvC,CAAC;AAFD,wDAEC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useAsObservableSource.js b/node_modules/mobx-react-lite/lib/useAsObservableSource.js
new file mode 100644
index 0000000..863d82f
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useAsObservableSource.js
@@ -0,0 +1,33 @@
+"use strict";
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useAsObservableSource = void 0;
+var utils_1 = require("./utils/utils");
+var mobx_1 = require("mobx");
+var react_1 = require("react");
+function useAsObservableSource(current) {
+    if ("production" !== process.env.NODE_ENV)
+        (0, utils_1.useDeprecated)("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples.");
+    var _a = __read((0, react_1.useState)(function () { return (0, mobx_1.observable)(current, {}, { deep: false }); }), 1), res = _a[0];
+    (0, mobx_1.runInAction)(function () {
+        Object.assign(res, current);
+    });
+    return res;
+}
+exports.useAsObservableSource = useAsObservableSource;
+//# sourceMappingURL=useAsObservableSource.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useAsObservableSource.js.map b/node_modules/mobx-react-lite/lib/useAsObservableSource.js.map
new file mode 100644
index 0000000..96a2864
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useAsObservableSource.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useAsObservableSource.js","sourceRoot":"","sources":["../src/useAsObservableSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,uCAA6C;AAC7C,6BAA8C;AAC9C,+BAAgC;AAEhC,SAAgB,qBAAqB,CAAyB,OAAgB;IAC1E,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ;QACrC,IAAA,qBAAa,EACT,4OAA4O,CAC/O,CAAA;IACC,IAAA,KAAA,OAAQ,IAAA,gBAAQ,EAAC,cAAM,OAAA,IAAA,iBAAU,EAAC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAxC,CAAwC,CAAC,IAAA,EAA/D,GAAG,QAA4D,CAAA;IACtE,IAAA,kBAAW,EAAC;QACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACd,CAAC;AAVD,sDAUC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useLocalObservable.js b/node_modules/mobx-react-lite/lib/useLocalObservable.js
new file mode 100644
index 0000000..b00e3c1
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useLocalObservable.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useLocalObservable = void 0;
+var mobx_1 = require("mobx");
+var react_1 = require("react");
+function useLocalObservable(initializer, annotations) {
+    return (0, react_1.useState)(function () { return (0, mobx_1.observable)(initializer(), annotations, { autoBind: true }); })[0];
+}
+exports.useLocalObservable = useLocalObservable;
+//# sourceMappingURL=useLocalObservable.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useLocalObservable.js.map b/node_modules/mobx-react-lite/lib/useLocalObservable.js.map
new file mode 100644
index 0000000..9320344
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useLocalObservable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useLocalObservable.js","sourceRoot":"","sources":["../src/useLocalObservable.ts"],"names":[],"mappings":";;;AAAA,6BAAiD;AACjD,+BAAgC;AAEhC,SAAgB,kBAAkB,CAC9B,WAAyB,EACzB,WAA2C;IAE3C,OAAO,IAAA,gBAAQ,EAAC,cAAM,OAAA,IAAA,iBAAU,EAAC,WAAW,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAA1D,CAA0D,CAAC,CAAC,CAAC,CAAC,CAAA;AACxF,CAAC;AALD,gDAKC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useLocalStore.js b/node_modules/mobx-react-lite/lib/useLocalStore.js
new file mode 100644
index 0000000..9fc0d95
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useLocalStore.js
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useLocalStore = void 0;
+var mobx_1 = require("mobx");
+var react_1 = require("react");
+var utils_1 = require("./utils/utils");
+var useAsObservableSource_1 = require("./useAsObservableSource");
+function useLocalStore(initializer, current) {
+    if ("production" !== process.env.NODE_ENV)
+        (0, utils_1.useDeprecated)("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead.");
+    var source = current && (0, useAsObservableSource_1.useAsObservableSource)(current);
+    return (0, react_1.useState)(function () { return (0, mobx_1.observable)(initializer(source), undefined, { autoBind: true }); })[0];
+}
+exports.useLocalStore = useLocalStore;
+//# sourceMappingURL=useLocalStore.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useLocalStore.js.map b/node_modules/mobx-react-lite/lib/useLocalStore.js.map
new file mode 100644
index 0000000..c85dee7
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useLocalStore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useLocalStore.js","sourceRoot":"","sources":["../src/useLocalStore.ts"],"names":[],"mappings":";;;AAAA,6BAAiC;AACjC,+BAAgC;AAEhC,uCAA6C;AAC7C,iEAA+D;AAO/D,SAAgB,aAAa,CACzB,WAAyC,EACzC,OAAiB;IAEjB,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ;QACrC,IAAA,qBAAa,EACT,oFAAoF,CACvF,CAAA;IACL,IAAM,MAAM,GAAG,OAAO,IAAI,IAAA,6CAAqB,EAAC,OAAO,CAAC,CAAA;IACxD,OAAO,IAAA,gBAAQ,EAAC,cAAM,OAAA,IAAA,iBAAU,EAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAA9D,CAA8D,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5F,CAAC;AAVD,sCAUC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useObserver.js b/node_modules/mobx-react-lite/lib/useObserver.js
new file mode 100644
index 0000000..5cf2143
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useObserver.js
@@ -0,0 +1,133 @@
+"use strict";
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useObserver = void 0;
+var mobx_1 = require("mobx");
+var react_1 = __importDefault(require("react"));
+var printDebugValue_1 = require("./utils/printDebugValue");
+var reactionCleanupTracking_1 = require("./utils/reactionCleanupTracking");
+var staticRendering_1 = require("./staticRendering");
+function observerComponentNameFor(baseComponentName) {
+    return "observer".concat(baseComponentName);
+}
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+var ObjectToBeRetainedByReact = /** @class */ (function () {
+    function ObjectToBeRetainedByReact() {
+    }
+    return ObjectToBeRetainedByReact;
+}());
+function objectToBeRetainedByReactFactory() {
+    return new ObjectToBeRetainedByReact();
+}
+function useObserver(fn, baseComponentName) {
+    if (baseComponentName === void 0) { baseComponentName = "observed"; }
+    if ((0, staticRendering_1.isUsingStaticRendering)()) {
+        return fn();
+    }
+    var _a = __read(react_1.default.useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0];
+    // Force update, see #2982
+    var _b = __read(react_1.default.useState(), 2), setState = _b[1];
+    var forceUpdate = function () { return setState([]); };
+    // StrictMode/ConcurrentMode/Suspense may mean that our component is
+    // rendered and abandoned multiple times, so we need to track leaked
+    // Reactions.
+    var reactionTrackingRef = react_1.default.useRef(null);
+    if (!reactionTrackingRef.current) {
+        // First render for this component (or first time since a previous
+        // reaction from an abandoned render was disposed).
+        var newReaction = new mobx_1.Reaction(observerComponentNameFor(baseComponentName), function () {
+            // Observable has changed, meaning we want to re-render
+            // BUT if we're a component that hasn't yet got to the useEffect()
+            // stage, we might be a component that _started_ to render, but
+            // got dropped, and we don't want to make state changes then.
+            // (It triggers warnings in StrictMode, for a start.)
+            if (trackingData_1.mounted) {
+                // We have reached useEffect(), so we're mounted, and can trigger an update
+                forceUpdate();
+            }
+            else {
+                // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+                // when (and if) useEffect() arrives.
+                trackingData_1.changedBeforeMount = true;
+            }
+        });
+        var trackingData_1 = (0, reactionCleanupTracking_1.addReactionToTrack)(reactionTrackingRef, newReaction, objectRetainedByReact);
+    }
+    var reaction = reactionTrackingRef.current.reaction;
+    react_1.default.useDebugValue(reaction, printDebugValue_1.printDebugValue);
+    react_1.default.useEffect(function () {
+        // Called on first mount only
+        (0, reactionCleanupTracking_1.recordReactionAsCommitted)(reactionTrackingRef);
+        if (reactionTrackingRef.current) {
+            // Great. We've already got our reaction from our render;
+            // all we need to do is to record that it's now mounted,
+            // to allow future observable changes to trigger re-renders
+            reactionTrackingRef.current.mounted = true;
+            // Got a change before first mount, force an update
+            if (reactionTrackingRef.current.changedBeforeMount) {
+                reactionTrackingRef.current.changedBeforeMount = false;
+                forceUpdate();
+            }
+        }
+        else {
+            // The reaction we set up in our render has been disposed.
+            // This can be due to bad timings of renderings, e.g. our
+            // component was paused for a _very_ long time, and our
+            // reaction got cleaned up
+            // Re-create the reaction
+            reactionTrackingRef.current = {
+                reaction: new mobx_1.Reaction(observerComponentNameFor(baseComponentName), function () {
+                    // We've definitely already been mounted at this point
+                    forceUpdate();
+                }),
+                mounted: true,
+                changedBeforeMount: false,
+                cleanAt: Infinity
+            };
+            forceUpdate();
+        }
+        return function () {
+            reactionTrackingRef.current.reaction.dispose();
+            reactionTrackingRef.current = null;
+        };
+    }, []);
+    // render the original component, but have the
+    // reaction track the observables, so that rendering
+    // can be invalidated (see above) once a dependency changes
+    var rendering;
+    var exception;
+    reaction.track(function () {
+        try {
+            rendering = fn();
+        }
+        catch (e) {
+            exception = e;
+        }
+    });
+    if (exception) {
+        throw exception; // re-throw any exceptions caught during rendering
+    }
+    return rendering;
+}
+exports.useObserver = useObserver;
+//# sourceMappingURL=useObserver.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/useObserver.js.map b/node_modules/mobx-react-lite/lib/useObserver.js.map
new file mode 100644
index 0000000..7858eb4
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/useObserver.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../src/useObserver.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js b/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js
new file mode 100644
index 0000000..13e14be
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FinalizationRegistry = void 0;
+var FinalizationRegistryLocal = typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry;
+exports.FinalizationRegistry = FinalizationRegistryLocal;
+//# sourceMappingURL=FinalizationRegistryWrapper.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js.map b/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js.map
new file mode 100644
index 0000000..396b5a8
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/FinalizationRegistryWrapper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"FinalizationRegistryWrapper.js","sourceRoot":"","sources":["../../src/utils/FinalizationRegistryWrapper.ts"],"names":[],"mappings":";;;AAQA,IAAM,yBAAyB,GAC3B,OAAO,oBAAoB,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAA;AAE5C,yDAAoB"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js b/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js
new file mode 100644
index 0000000..19fcd56
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var mobx_1 = require("mobx");
+var react_1 = require("react");
+if (!react_1.useState) {
+    throw new Error("mobx-react-lite requires React with Hooks support");
+}
+if (!mobx_1.makeObservable) {
+    throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available");
+}
+//# sourceMappingURL=assertEnvironment.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js.map b/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js.map
new file mode 100644
index 0000000..5618829
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/assertEnvironment.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"assertEnvironment.js","sourceRoot":"","sources":["../../src/utils/assertEnvironment.ts"],"names":[],"mappings":";;AAAA,6BAAqC;AACrC,+BAAgC;AAEhC,IAAI,CAAC,gBAAQ,EAAE;IACX,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;CACvE;AACD,IAAI,CAAC,qBAAc,EAAE;IACjB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;CACxF"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js b/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
new file mode 100644
index 0000000..09f86a3
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js
@@ -0,0 +1,42 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createReactionCleanupTrackingUsingFinalizationRegister = void 0;
+var reactionCleanupTrackingCommon_1 = require("./reactionCleanupTrackingCommon");
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
+    var cleanupTokenToReactionTrackingMap = new Map();
+    var globalCleanupTokensCounter = 1;
+    var registry = new FinalizationRegistry(function cleanupFunction(token) {
+        var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
+        if (trackedReaction) {
+            trackedReaction.reaction.dispose();
+            cleanupTokenToReactionTrackingMap.delete(token);
+        }
+    });
+    return {
+        addReactionToTrack: function (reactionTrackingRef, reaction, objectRetainedByReact) {
+            var token = globalCleanupTokensCounter++;
+            registry.register(objectRetainedByReact, token, reactionTrackingRef);
+            reactionTrackingRef.current = (0, reactionCleanupTrackingCommon_1.createTrackingData)(reaction);
+            reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
+            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
+            return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: function (reactionRef) {
+            registry.unregister(reactionRef);
+            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+                cleanupTokenToReactionTrackingMap.delete(reactionRef.current.finalizationRegistryCleanupToken);
+            }
+        },
+        forceCleanupTimerToRunNowForTests: function () {
+            // When FinalizationRegistry in use, this this is no-op
+        },
+        resetCleanupScheduleForTests: function () {
+            // When FinalizationRegistry in use, this this is no-op
+        }
+    };
+}
+exports.createReactionCleanupTrackingUsingFinalizationRegister = createReactionCleanupTrackingUsingFinalizationRegister;
+//# sourceMappingURL=createReactionCleanupTrackingUsingFinalizationRegister.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map b/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
new file mode 100644
index 0000000..4e6cf2f
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/createReactionCleanupTrackingUsingFinalizationRegister.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createReactionCleanupTrackingUsingFinalizationRegister.js","sourceRoot":"","sources":["../../src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts"],"names":[],"mappings":";;;AAEA,iFAIwC;AAExC;;GAEG;AACH,SAAgB,sDAAsD,CAClE,oBAA4E;IAE5E,IAAM,iCAAiC,GAAG,IAAI,GAAG,EAA6B,CAAA;IAC9E,IAAI,0BAA0B,GAAG,CAAC,CAAA;IAElC,IAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,SAAS,eAAe,CAAC,KAAa;QAC5E,IAAM,eAAe,GAAG,iCAAiC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpE,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAClC,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SAClD;IACL,CAAC,CAAC,CAAA;IAEF,OAAO;QACH,kBAAkB,EAAlB,UACI,mBAAqE,EACrE,QAAkB,EAClB,qBAA6B;YAE7B,IAAM,KAAK,GAAG,0BAA0B,EAAE,CAAA;YAE1C,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAA;YACpE,mBAAmB,CAAC,OAAO,GAAG,IAAA,kDAAkB,EAAC,QAAQ,CAAC,CAAA;YAC1D,mBAAmB,CAAC,OAAO,CAAC,gCAAgC,GAAG,KAAK,CAAA;YACpE,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAEzE,OAAO,mBAAmB,CAAC,OAAO,CAAA;QACtC,CAAC;QACD,yBAAyB,EAAzB,UAA0B,WAA6D;YACnF,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAEhC,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,gCAAgC,EAAE;gBAC7E,iCAAiC,CAAC,MAAM,CACpC,WAAW,CAAC,OAAO,CAAC,gCAAgC,CACvD,CAAA;aACJ;QACL,CAAC;QACD,iCAAiC;YAC7B,uDAAuD;QAC3D,CAAC;QACD,4BAA4B;YACxB,uDAAuD;QAC3D,CAAC;KACJ,CAAA;AACL,CAAC;AA7CD,wHA6CC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js b/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js
new file mode 100644
index 0000000..43258fd
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js
@@ -0,0 +1,122 @@
+"use strict";
+var __values = (this && this.__values) || function(o) {
+    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+    if (m) return m.call(o);
+    if (o && typeof o.length === "number") return {
+        next: function () {
+            if (o && i >= o.length) o = void 0;
+            return { value: o && o[i++], done: !o };
+        }
+    };
+    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createTimerBasedReactionCleanupTracking = void 0;
+var reactionCleanupTrackingCommon_1 = require("./reactionCleanupTrackingCommon");
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+function createTimerBasedReactionCleanupTracking() {
+    /**
+     * Reactions created by components that have yet to be fully mounted.
+     */
+    var uncommittedReactionRefs = new Set();
+    /**
+     * Latest 'uncommitted reactions' cleanup timer handle.
+     */
+    var reactionCleanupHandle;
+    /* istanbul ignore next */
+    /**
+     * Only to be used by test functions; do not export outside of mobx-react-lite
+     */
+    function forceCleanupTimerToRunNowForTests() {
+        // This allows us to control the execution of the cleanup timer
+        // to force it to run at awkward times in unit tests.
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle);
+            cleanUncommittedReactions();
+        }
+    }
+    /* istanbul ignore next */
+    function resetCleanupScheduleForTests() {
+        var e_1, _a;
+        if (uncommittedReactionRefs.size > 0) {
+            try {
+                for (var uncommittedReactionRefs_1 = __values(uncommittedReactionRefs), uncommittedReactionRefs_1_1 = uncommittedReactionRefs_1.next(); !uncommittedReactionRefs_1_1.done; uncommittedReactionRefs_1_1 = uncommittedReactionRefs_1.next()) {
+                    var ref = uncommittedReactionRefs_1_1.value;
+                    var tracking = ref.current;
+                    if (tracking) {
+                        tracking.reaction.dispose();
+                        ref.current = null;
+                    }
+                }
+            }
+            catch (e_1_1) { e_1 = { error: e_1_1 }; }
+            finally {
+                try {
+                    if (uncommittedReactionRefs_1_1 && !uncommittedReactionRefs_1_1.done && (_a = uncommittedReactionRefs_1.return)) _a.call(uncommittedReactionRefs_1);
+                }
+                finally { if (e_1) throw e_1.error; }
+            }
+            uncommittedReactionRefs.clear();
+        }
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle);
+            reactionCleanupHandle = undefined;
+        }
+    }
+    function ensureCleanupTimerRunning() {
+        if (reactionCleanupHandle === undefined) {
+            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, reactionCleanupTrackingCommon_1.CLEANUP_TIMER_LOOP_MILLIS);
+        }
+    }
+    function scheduleCleanupOfReactionIfLeaked(ref) {
+        uncommittedReactionRefs.add(ref);
+        ensureCleanupTimerRunning();
+    }
+    function recordReactionAsCommitted(reactionRef) {
+        uncommittedReactionRefs.delete(reactionRef);
+    }
+    /**
+     * Run by the cleanup timer to dispose any outstanding reactions
+     */
+    function cleanUncommittedReactions() {
+        reactionCleanupHandle = undefined;
+        // Loop through all the candidate leaked reactions; those older
+        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+        var now = Date.now();
+        uncommittedReactionRefs.forEach(function (ref) {
+            var tracking = ref.current;
+            if (tracking) {
+                if (now >= tracking.cleanAt) {
+                    // It's time to tidy up this leaked reaction.
+                    tracking.reaction.dispose();
+                    ref.current = null;
+                    uncommittedReactionRefs.delete(ref);
+                }
+            }
+        });
+        if (uncommittedReactionRefs.size > 0) {
+            // We've just finished a round of cleanups but there are still
+            // some leak candidates outstanding.
+            ensureCleanupTimerRunning();
+        }
+    }
+    return {
+        addReactionToTrack: function (reactionTrackingRef, reaction, 
+        /**
+         * On timer based implementation we don't really need this object,
+         * but we keep the same api
+         */
+        objectRetainedByReact) {
+            reactionTrackingRef.current = (0, reactionCleanupTrackingCommon_1.createTrackingData)(reaction);
+            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef);
+            return reactionTrackingRef.current;
+        },
+        recordReactionAsCommitted: recordReactionAsCommitted,
+        forceCleanupTimerToRunNowForTests: forceCleanupTimerToRunNowForTests,
+        resetCleanupScheduleForTests: resetCleanupScheduleForTests
+    };
+}
+exports.createTimerBasedReactionCleanupTracking = createTimerBasedReactionCleanupTracking;
+//# sourceMappingURL=createTimerBasedReactionCleanupTracking.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js.map b/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js.map
new file mode 100644
index 0000000..27a5449
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/createTimerBasedReactionCleanupTracking.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createTimerBasedReactionCleanupTracking.js","sourceRoot":"","sources":["../../src/utils/createTimerBasedReactionCleanupTracking.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,iFAKwC;AAExC;;GAEG;AACH,SAAgB,uCAAuC;IACnD;;OAEG;IACH,IAAM,uBAAuB,GAA0D,IAAI,GAAG,EAAE,CAAA;IAEhG;;OAEG;IACH,IAAI,qBAAgE,CAAA;IAEpE,0BAA0B;IAC1B;;OAEG;IACH,SAAS,iCAAiC;QACtC,+DAA+D;QAC/D,qDAAqD;QACrD,IAAI,qBAAqB,EAAE;YACvB,YAAY,CAAC,qBAAqB,CAAC,CAAA;YACnC,yBAAyB,EAAE,CAAA;SAC9B;IACL,CAAC;IAED,0BAA0B;IAC1B,SAAS,4BAA4B;;QACjC,IAAI,uBAAuB,CAAC,IAAI,GAAG,CAAC,EAAE;;gBAClC,KAAkB,IAAA,4BAAA,SAAA,uBAAuB,CAAA,gEAAA,qGAAE;oBAAtC,IAAM,GAAG,oCAAA;oBACV,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;oBAC5B,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;wBAC3B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;qBACrB;iBACJ;;;;;;;;;YACD,uBAAuB,CAAC,KAAK,EAAE,CAAA;SAClC;QAED,IAAI,qBAAqB,EAAE;YACvB,YAAY,CAAC,qBAAqB,CAAC,CAAA;YACnC,qBAAqB,GAAG,SAAS,CAAA;SACpC;IACL,CAAC;IAED,SAAS,yBAAyB;QAC9B,IAAI,qBAAqB,KAAK,SAAS,EAAE;YACrC,qBAAqB,GAAG,UAAU,CAAC,yBAAyB,EAAE,yDAAyB,CAAC,CAAA;SAC3F;IACL,CAAC;IAED,SAAS,iCAAiC,CACtC,GAAqD;QAErD,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEhC,yBAAyB,EAAE,CAAA;IAC/B,CAAC;IAED,SAAS,yBAAyB,CAC9B,WAA6D;QAE7D,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,SAAS,yBAAyB;QAC9B,qBAAqB,GAAG,SAAS,CAAA;QAEjC,+DAA+D;QAC/D,yDAAyD;QAEzD,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,uBAAuB,CAAC,OAAO,CAAC,UAAA,GAAG;YAC/B,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;YAC5B,IAAI,QAAQ,EAAE;gBACV,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACzB,6CAA6C;oBAC7C,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;oBAC3B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;oBAClB,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;iBACtC;aACJ;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,uBAAuB,CAAC,IAAI,GAAG,CAAC,EAAE;YAClC,8DAA8D;YAC9D,oCAAoC;YACpC,yBAAyB,EAAE,CAAA;SAC9B;IACL,CAAC;IAED,OAAO;QACH,kBAAkB,EAAlB,UACI,mBAAqE,EACrE,QAAkB;QAClB;;;WAGG;QACH,qBAA8B;YAE9B,mBAAmB,CAAC,OAAO,GAAG,IAAA,kDAAkB,EAAC,QAAQ,CAAC,CAAA;YAC1D,iCAAiC,CAAC,mBAAmB,CAAC,CAAA;YACtD,OAAO,mBAAmB,CAAC,OAAO,CAAA;QACtC,CAAC;QACD,yBAAyB,2BAAA;QACzB,iCAAiC,mCAAA;QACjC,4BAA4B,8BAAA;KAC/B,CAAA;AACL,CAAC;AA9GD,0FA8GC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/observerBatching.js b/node_modules/mobx-react-lite/lib/utils/observerBatching.js
new file mode 100644
index 0000000..3703070
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/observerBatching.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isObserverBatched = exports.observerBatching = exports.defaultNoopBatch = void 0;
+var mobx_1 = require("mobx");
+function defaultNoopBatch(callback) {
+    callback();
+}
+exports.defaultNoopBatch = defaultNoopBatch;
+function observerBatching(reactionScheduler) {
+    if (!reactionScheduler) {
+        reactionScheduler = defaultNoopBatch;
+        if ("production" !== process.env.NODE_ENV) {
+            console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native");
+        }
+    }
+    (0, mobx_1.configure)({ reactionScheduler: reactionScheduler });
+}
+exports.observerBatching = observerBatching;
+var isObserverBatched = function () {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn("[MobX] Deprecated");
+    }
+    return true;
+};
+exports.isObserverBatched = isObserverBatched;
+//# sourceMappingURL=observerBatching.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/observerBatching.js.map b/node_modules/mobx-react-lite/lib/utils/observerBatching.js.map
new file mode 100644
index 0000000..06f6d92
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/observerBatching.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"observerBatching.js","sourceRoot":"","sources":["../../src/utils/observerBatching.ts"],"names":[],"mappings":";;;AAAA,6BAAgC;AAEhC,SAAgB,gBAAgB,CAAC,QAAoB;IACjD,QAAQ,EAAE,CAAA;AACd,CAAC;AAFD,4CAEC;AAED,SAAgB,gBAAgB,CAAC,iBAAsB;IACnD,IAAI,CAAC,iBAAiB,EAAE;QACpB,iBAAiB,GAAG,gBAAgB,CAAA;QACpC,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvC,OAAO,CAAC,IAAI,CACR,6EAA6E,CAChF,CAAA;SACJ;KACJ;IACD,IAAA,gBAAS,EAAC,EAAE,iBAAiB,mBAAA,EAAE,CAAC,CAAA;AACpC,CAAC;AAVD,4CAUC;AAEM,IAAM,iBAAiB,GAAG;IAC7B,IAAI,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;KACpC;IAED,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AANY,QAAA,iBAAiB,qBAM7B"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/printDebugValue.js b/node_modules/mobx-react-lite/lib/utils/printDebugValue.js
new file mode 100644
index 0000000..dd3db82
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/printDebugValue.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.printDebugValue = void 0;
+var mobx_1 = require("mobx");
+function printDebugValue(v) {
+    return (0, mobx_1.getDependencyTree)(v);
+}
+exports.printDebugValue = printDebugValue;
+//# sourceMappingURL=printDebugValue.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/printDebugValue.js.map b/node_modules/mobx-react-lite/lib/utils/printDebugValue.js.map
new file mode 100644
index 0000000..ca0668c
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/printDebugValue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"printDebugValue.js","sourceRoot":"","sources":["../../src/utils/printDebugValue.ts"],"names":[],"mappings":";;;AAAA,6BAAkD;AAElD,SAAgB,eAAe,CAAC,CAAW;IACvC,OAAO,IAAA,wBAAiB,EAAC,CAAC,CAAC,CAAA;AAC/B,CAAC;AAFD,0CAEC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js
new file mode 100644
index 0000000..be708d6
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js
@@ -0,0 +1,6 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unstable_batchedUpdates = void 0;
+var react_dom_1 = require("react-dom");
+Object.defineProperty(exports, "unstable_batchedUpdates", { enumerable: true, get: function () { return react_dom_1.unstable_batchedUpdates; } });
+//# sourceMappingURL=reactBatchedUpdates.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js.map b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js.map
new file mode 100644
index 0000000..bde8b2c
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactBatchedUpdates.js","sourceRoot":"","sources":["../../src/utils/reactBatchedUpdates.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AAA1C,oHAAA,uBAAuB,OAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js
new file mode 100644
index 0000000..05cfdb2
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js
@@ -0,0 +1,7 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unstable_batchedUpdates = void 0;
+// @ts-ignore
+var react_native_1 = require("react-native");
+Object.defineProperty(exports, "unstable_batchedUpdates", { enumerable: true, get: function () { return react_native_1.unstable_batchedUpdates; } });
+//# sourceMappingURL=reactBatchedUpdates.native.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js.map b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js.map
new file mode 100644
index 0000000..f6e5926
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactBatchedUpdates.native.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactBatchedUpdates.native.js","sourceRoot":"","sources":["../../src/utils/reactBatchedUpdates.native.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACb,6CAAsD;AAA7C,uHAAA,uBAAuB,OAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js
new file mode 100644
index 0000000..a0c6837
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.forceCleanupTimerToRunNowForTests = exports.resetCleanupScheduleForTests = exports.recordReactionAsCommitted = exports.addReactionToTrack = void 0;
+var FinalizationRegistryWrapper_1 = require("./FinalizationRegistryWrapper");
+var createReactionCleanupTrackingUsingFinalizationRegister_1 = require("./createReactionCleanupTrackingUsingFinalizationRegister");
+var createTimerBasedReactionCleanupTracking_1 = require("./createTimerBasedReactionCleanupTracking");
+var _a = FinalizationRegistryWrapper_1.FinalizationRegistry
+    ? (0, createReactionCleanupTrackingUsingFinalizationRegister_1.createReactionCleanupTrackingUsingFinalizationRegister)(FinalizationRegistryWrapper_1.FinalizationRegistry)
+    : (0, createTimerBasedReactionCleanupTracking_1.createTimerBasedReactionCleanupTracking)(), addReactionToTrack = _a.addReactionToTrack, recordReactionAsCommitted = _a.recordReactionAsCommitted, resetCleanupScheduleForTests = _a.resetCleanupScheduleForTests, forceCleanupTimerToRunNowForTests = _a.forceCleanupTimerToRunNowForTests;
+exports.addReactionToTrack = addReactionToTrack;
+exports.recordReactionAsCommitted = recordReactionAsCommitted;
+exports.resetCleanupScheduleForTests = resetCleanupScheduleForTests;
+exports.forceCleanupTimerToRunNowForTests = forceCleanupTimerToRunNowForTests;
+//# sourceMappingURL=reactionCleanupTracking.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js.map b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js.map
new file mode 100644
index 0000000..39f1542
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTracking.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactionCleanupTracking.js","sourceRoot":"","sources":["../../src/utils/reactionCleanupTracking.ts"],"names":[],"mappings":";;;AAAA,6EAA0G;AAC1G,mIAAiI;AACjI,qGAAmG;AAG7F,IAAA,KAKF,kDAAkC;IAClC,CAAC,CAAC,IAAA,+GAAsD,EAAC,kDAAkC,CAAC;IAC5F,CAAC,CAAC,IAAA,iFAAuC,GAAE,EAN3C,kBAAkB,wBAAA,EAClB,yBAAyB,+BAAA,EACzB,4BAA4B,kCAAA,EAC5B,iCAAiC,uCAGU,CAAA;AAG3C,gDAAkB;AAClB,8DAAyB;AACzB,oEAA4B;AAC5B,8EAAiC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js
new file mode 100644
index 0000000..a19e8ab
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js
@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CLEANUP_TIMER_LOOP_MILLIS = exports.CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = exports.createTrackingData = void 0;
+function createTrackingData(reaction) {
+    var trackingData = {
+        reaction: reaction,
+        mounted: false,
+        changedBeforeMount: false,
+        cleanAt: Date.now() + exports.CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+    };
+    return trackingData;
+}
+exports.createTrackingData = createTrackingData;
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+exports.CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10000;
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+exports.CLEANUP_TIMER_LOOP_MILLIS = 10000;
+//# sourceMappingURL=reactionCleanupTrackingCommon.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js.map b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js.map
new file mode 100644
index 0000000..32398ab
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/reactionCleanupTrackingCommon.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"reactionCleanupTrackingCommon.js","sourceRoot":"","sources":["../../src/utils/reactionCleanupTrackingCommon.ts"],"names":[],"mappings":";;;AAEA,SAAgB,kBAAkB,CAAC,QAAkB;IACjD,IAAM,YAAY,GAAsB;QACpC,QAAQ,UAAA;QACR,OAAO,EAAE,KAAK;QACd,kBAAkB,EAAE,KAAK;QACzB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,6CAAqC;KAC9D,CAAA;IACD,OAAO,YAAY,CAAA;AACvB,CAAC;AARD,gDAQC;AAkDD;;;;;GAKG;AACU,QAAA,qCAAqC,GAAG,KAAM,CAAA;AAE3D;;GAEG;AACU,QAAA,yBAAyB,GAAG,KAAM,CAAA"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/utils.js b/node_modules/mobx-react-lite/lib/utils/utils.js
new file mode 100644
index 0000000..389e8ca
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/utils.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.useDeprecated = void 0;
+var deprecatedMessages = [];
+function useDeprecated(msg) {
+    if (!deprecatedMessages.includes(msg)) {
+        deprecatedMessages.push(msg);
+        console.warn(msg);
+    }
+}
+exports.useDeprecated = useDeprecated;
+//# sourceMappingURL=utils.js.map
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/lib/utils/utils.js.map b/node_modules/mobx-react-lite/lib/utils/utils.js.map
new file mode 100644
index 0000000..84e28ed
--- /dev/null
+++ b/node_modules/mobx-react-lite/lib/utils/utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;AAAA,IAAM,kBAAkB,GAAa,EAAE,CAAA;AAEvC,SAAgB,aAAa,CAAC,GAAW;IACrC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACnC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACpB;AACL,CAAC;AALD,sCAKC"}
\ No newline at end of file
diff --git a/node_modules/mobx-react-lite/package.json b/node_modules/mobx-react-lite/package.json
new file mode 100644
index 0000000..8e3f1d7
--- /dev/null
+++ b/node_modules/mobx-react-lite/package.json
@@ -0,0 +1,106 @@
+{
+  "_from": "mobx-react-lite@^3.2.0",
+  "_id": "mobx-react-lite@3.2.3",
+  "_inBundle": false,
+  "_integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw==",
+  "_location": "/mobx-react-lite",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "mobx-react-lite@^3.2.0",
+    "name": "mobx-react-lite",
+    "escapedName": "mobx-react-lite",
+    "rawSpec": "^3.2.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.2.0"
+  },
+  "_requiredBy": [
+    "/mobx-react"
+  ],
+  "_resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz",
+  "_shasum": "83d2b32ebf4383cd0dc0d397acbf53a8e9c66765",
+  "_spec": "mobx-react-lite@^3.2.0",
+  "_where": "C:\\Users\\mikke\\Documents\\Skole NTNU 2021\\Bachler\\it2901-trdk03\\node_modules\\mobx-react",
+  "author": {
+    "name": "Daniel K."
+  },
+  "bugs": {
+    "url": "https://github.com/mobxjs/mobx/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Lightweight React bindings for MobX based on React 16.8+ and Hooks",
+  "devDependencies": {
+    "expose-gc": "^1.0.0",
+    "mobx": "^6.3.6"
+  },
+  "files": [
+    "src",
+    "dist/",
+    "lib/",
+    "es/",
+    "LICENSE",
+    "CHANGELOG.md",
+    "README.md",
+    "batching*"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/mobx"
+  },
+  "homepage": "https://mobx.js.org",
+  "jsdelivr": "dist/mobxreactlite.umd.production.min.js",
+  "jsnext:main": "dist/mobxreactlite.esm.production.min.js",
+  "keywords": [
+    "mobx",
+    "mobservable",
+    "react-component",
+    "react",
+    "reactjs",
+    "reactive",
+    "hooks",
+    "observer",
+    "useLocalObservable"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "module": "es/index.js",
+  "name": "mobx-react-lite",
+  "peerDependencies": {
+    "mobx": "^6.1.0",
+    "react": "^16.8.0 || ^17"
+  },
+  "peerDependenciesMeta": {
+    "react-dom": {
+      "optional": true
+    },
+    "react-native": {
+      "optional": true
+    }
+  },
+  "react-native": "es/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mobxjs/mobx.git"
+  },
+  "scripts": {
+    "build": "node ../../scripts/build.js mobxReactLite",
+    "build:cjs": "tsc --project tsconfig.build.cjs.json",
+    "build:es": "tsc --project tsconfig.build.es.json",
+    "build:test": "yarn build --target test",
+    "lint": "eslint src/**/* --ext .js,.ts,.tsx",
+    "prepublish": "yarn build --target publish && yarn build:cjs && yarn build:es",
+    "test": "jest",
+    "test:check": "yarn test:types",
+    "test:size": "yarn import-size --report . observer useLocalObservable",
+    "test:types": "tsc --noEmit"
+  },
+  "source": "src/index.ts",
+  "types": "dist/index.d.ts",
+  "typings": "dist/index.d.ts",
+  "umd:main": "dist/mobxreact.umd.production.min.js",
+  "unpkg": "dist/mobxreactlite.umd.production.min.js",
+  "version": "3.2.3"
+}
diff --git a/node_modules/mobx-react-lite/src/ObserverComponent.ts b/node_modules/mobx-react-lite/src/ObserverComponent.ts
new file mode 100644
index 0000000..5b0dc59
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/ObserverComponent.ts
@@ -0,0 +1,54 @@
+import { useObserver } from "./useObserver"
+
+interface IObserverProps {
+    children?(): React.ReactElement | null
+    render?(): React.ReactElement | null
+}
+
+function ObserverComponent({ children, render }: IObserverProps) {
+    const component = children || render
+    if (typeof component !== "function") {
+        return null
+    }
+    return useObserver(component)
+}
+if ("production" !== process.env.NODE_ENV) {
+    ObserverComponent.propTypes = {
+        children: ObserverPropsCheck,
+        render: ObserverPropsCheck
+    }
+}
+ObserverComponent.displayName = "Observer"
+
+export { ObserverComponent as Observer }
+
+function ObserverPropsCheck(
+    props: { [k: string]: any },
+    key: string,
+    componentName: string,
+    location: any,
+    propFullName: string
+) {
+    const extraKey = key === "children" ? "render" : "children"
+    const hasProp = typeof props[key] === "function"
+    const hasExtraProp = typeof props[extraKey] === "function"
+    if (hasProp && hasExtraProp) {
+        return new Error(
+            "MobX Observer: Do not use children and render in the same time in`" + componentName
+        )
+    }
+
+    if (hasProp || hasExtraProp) {
+        return null
+    }
+    return new Error(
+        "Invalid prop `" +
+            propFullName +
+            "` of type `" +
+            typeof props[key] +
+            "` supplied to" +
+            " `" +
+            componentName +
+            "`, expected `function`."
+    )
+}
diff --git a/node_modules/mobx-react-lite/src/index.ts b/node_modules/mobx-react-lite/src/index.ts
new file mode 100644
index 0000000..b493ee1
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/index.ts
@@ -0,0 +1,37 @@
+import "./utils/assertEnvironment"
+
+import { unstable_batchedUpdates as batch } from "./utils/reactBatchedUpdates"
+import { observerBatching } from "./utils/observerBatching"
+import { useDeprecated } from "./utils/utils"
+import { useObserver as useObserverOriginal } from "./useObserver"
+import { enableStaticRendering } from "./staticRendering"
+
+observerBatching(batch)
+
+export { isUsingStaticRendering, enableStaticRendering } from "./staticRendering"
+export { observer, IObserverOptions } from "./observer"
+export { Observer } from "./ObserverComponent"
+export { useLocalObservable } from "./useLocalObservable"
+export { useLocalStore } from "./useLocalStore"
+export { useAsObservableSource } from "./useAsObservableSource"
+export { resetCleanupScheduleForTests as clearTimers } from "./utils/reactionCleanupTracking"
+
+export function useObserver<T>(fn: () => T, baseComponentName: string = "observed"): T {
+    if ("production" !== process.env.NODE_ENV) {
+        useDeprecated(
+            "[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`."
+        )
+    }
+    return useObserverOriginal(fn, baseComponentName)
+}
+
+export { isObserverBatched, observerBatching } from "./utils/observerBatching"
+
+export function useStaticRendering(enable: boolean) {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn(
+            "[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead"
+        )
+    }
+    enableStaticRendering(enable)
+}
diff --git a/node_modules/mobx-react-lite/src/observer.ts b/node_modules/mobx-react-lite/src/observer.ts
new file mode 100644
index 0000000..af076ef
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/observer.ts
@@ -0,0 +1,119 @@
+import { forwardRef, memo } from "react"
+
+import { isUsingStaticRendering } from "./staticRendering"
+import { useObserver } from "./useObserver"
+
+export interface IObserverOptions {
+    readonly forwardRef?: boolean
+}
+
+export function observer<P extends object, TRef = {}>(
+    baseComponent: React.RefForwardingComponent<TRef, P>,
+    options: IObserverOptions & { forwardRef: true }
+): React.MemoExoticComponent<
+    React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<TRef>>
+>
+
+export function observer<P extends object>(
+    baseComponent: React.FunctionComponent<P>,
+    options?: IObserverOptions
+): React.FunctionComponent<P>
+
+export function observer<
+    C extends React.FunctionComponent<any> | React.RefForwardingComponent<any>,
+    Options extends IObserverOptions
+>(
+    baseComponent: C,
+    options?: Options
+): Options extends { forwardRef: true }
+    ? C extends React.RefForwardingComponent<infer TRef, infer P>
+        ? C &
+              React.MemoExoticComponent<
+                  React.ForwardRefExoticComponent<
+                      React.PropsWithoutRef<P> & React.RefAttributes<TRef>
+                  >
+              >
+        : never /* forwardRef set for a non forwarding component */
+    : C & { displayName: string }
+
+// n.b. base case is not used for actual typings or exported in the typing files
+export function observer<P extends object, TRef = {}>(
+    baseComponent: React.RefForwardingComponent<TRef, P> | React.FunctionComponent<P>,
+    options?: IObserverOptions
+) {
+    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307
+    if (isUsingStaticRendering()) {
+        return baseComponent
+    }
+
+    const realOptions = {
+        forwardRef: false,
+        ...options
+    }
+
+    const baseComponentName = baseComponent.displayName || baseComponent.name
+
+    const wrappedComponent = (props: P, ref: React.Ref<TRef>) => {
+        return useObserver(() => baseComponent(props, ref), baseComponentName)
+    }
+
+    // Don't set `displayName` for anonymous components,
+    // so the `displayName` can be customized by user, see #3192.
+    if (baseComponentName !== "") {
+        wrappedComponent.displayName = baseComponentName
+    }
+
+    // Support legacy context: `contextTypes` must be applied before `memo`
+    if ((baseComponent as any).contextTypes) {
+        wrappedComponent.contextTypes = (baseComponent as any).contextTypes
+    }
+
+    // memo; we are not interested in deep updates
+    // in props; we assume that if deep objects are changed,
+    // this is in observables, which would have been tracked anyway
+    let memoComponent
+    if (realOptions.forwardRef) {
+        // we have to use forwardRef here because:
+        // 1. it cannot go before memo, only after it
+        // 2. forwardRef converts the function into an actual component, so we can't let the baseComponent do it
+        //    since it wouldn't be a callable function anymore
+        memoComponent = memo(forwardRef(wrappedComponent))
+    } else {
+        memoComponent = memo(wrappedComponent)
+    }
+
+    copyStaticProperties(baseComponent, memoComponent)
+
+    if ("production" !== process.env.NODE_ENV) {
+        Object.defineProperty(memoComponent, "contextTypes", {
+            set() {
+                throw new Error(
+                    `[mobx-react-lite] \`${
+                        this.displayName || this.type?.displayName || "Component"
+                    }.contextTypes\` must be set before applying \`observer\`.`
+                )
+            }
+        })
+    }
+
+    return memoComponent
+}
+
+// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+const hoistBlackList: any = {
+    $$typeof: true,
+    render: true,
+    compare: true,
+    type: true,
+    // Don't redefine `displayName`,
+    // it's defined as getter-setter pair on `memo` (see #3192).
+    displayName: true
+}
+
+function copyStaticProperties(base: any, target: any) {
+    Object.keys(base).forEach(key => {
+        if (!hoistBlackList[key]) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)
+        }
+    })
+}
diff --git a/node_modules/mobx-react-lite/src/staticRendering.ts b/node_modules/mobx-react-lite/src/staticRendering.ts
new file mode 100644
index 0000000..525bdbb
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/staticRendering.ts
@@ -0,0 +1,9 @@
+let globalIsUsingStaticRendering = false
+
+export function enableStaticRendering(enable: boolean) {
+    globalIsUsingStaticRendering = enable
+}
+
+export function isUsingStaticRendering(): boolean {
+    return globalIsUsingStaticRendering
+}
diff --git a/node_modules/mobx-react-lite/src/useAsObservableSource.ts b/node_modules/mobx-react-lite/src/useAsObservableSource.ts
new file mode 100644
index 0000000..5b83a75
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/useAsObservableSource.ts
@@ -0,0 +1,15 @@
+import { useDeprecated } from "./utils/utils"
+import { observable, runInAction } from "mobx"
+import { useState } from "react"
+
+export function useAsObservableSource<TSource extends object>(current: TSource): TSource {
+    if ("production" !== process.env.NODE_ENV)
+        useDeprecated(
+            "[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples."
+        )
+    const [res] = useState(() => observable(current, {}, { deep: false }))
+    runInAction(() => {
+        Object.assign(res, current)
+    })
+    return res
+}
diff --git a/node_modules/mobx-react-lite/src/useLocalObservable.ts b/node_modules/mobx-react-lite/src/useLocalObservable.ts
new file mode 100644
index 0000000..fde49ea
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/useLocalObservable.ts
@@ -0,0 +1,9 @@
+import { observable, AnnotationsMap } from "mobx"
+import { useState } from "react"
+
+export function useLocalObservable<TStore extends Record<string, any>>(
+    initializer: () => TStore,
+    annotations?: AnnotationsMap<TStore, never>
+): TStore {
+    return useState(() => observable(initializer(), annotations, { autoBind: true }))[0]
+}
diff --git a/node_modules/mobx-react-lite/src/useLocalStore.ts b/node_modules/mobx-react-lite/src/useLocalStore.ts
new file mode 100644
index 0000000..03f2700
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/useLocalStore.ts
@@ -0,0 +1,22 @@
+import { observable } from "mobx"
+import { useState } from "react"
+
+import { useDeprecated } from "./utils/utils"
+import { useAsObservableSource } from "./useAsObservableSource"
+
+export function useLocalStore<TStore extends Record<string, any>>(initializer: () => TStore): TStore
+export function useLocalStore<TStore extends Record<string, any>, TSource extends object>(
+    initializer: (source: TSource) => TStore,
+    current: TSource
+): TStore
+export function useLocalStore<TStore extends Record<string, any>, TSource extends object>(
+    initializer: (source?: TSource) => TStore,
+    current?: TSource
+): TStore {
+    if ("production" !== process.env.NODE_ENV)
+        useDeprecated(
+            "[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead."
+        )
+    const source = current && useAsObservableSource(current)
+    return useState(() => observable(initializer(source), undefined, { autoBind: true }))[0]
+}
diff --git a/node_modules/mobx-react-lite/src/useObserver.ts b/node_modules/mobx-react-lite/src/useObserver.ts
new file mode 100644
index 0000000..a5d889f
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/useObserver.ts
@@ -0,0 +1,126 @@
+import { Reaction } from "mobx"
+import React from "react"
+import { printDebugValue } from "./utils/printDebugValue"
+import {
+    addReactionToTrack,
+    IReactionTracking,
+    recordReactionAsCommitted
+} from "./utils/reactionCleanupTracking"
+import { isUsingStaticRendering } from "./staticRendering"
+
+function observerComponentNameFor(baseComponentName: string) {
+    return `observer${baseComponentName}`
+}
+
+/**
+ * We use class to make it easier to detect in heap snapshots by name
+ */
+class ObjectToBeRetainedByReact {}
+
+function objectToBeRetainedByReactFactory() {
+    return new ObjectToBeRetainedByReact()
+}
+
+export function useObserver<T>(fn: () => T, baseComponentName: string = "observed"): T {
+    if (isUsingStaticRendering()) {
+        return fn()
+    }
+
+    const [objectRetainedByReact] = React.useState(objectToBeRetainedByReactFactory)
+    // Force update, see #2982
+    const [, setState] = React.useState()
+    const forceUpdate = () => setState([] as any)
+
+    // StrictMode/ConcurrentMode/Suspense may mean that our component is
+    // rendered and abandoned multiple times, so we need to track leaked
+    // Reactions.
+    const reactionTrackingRef = React.useRef<IReactionTracking | null>(null)
+
+    if (!reactionTrackingRef.current) {
+        // First render for this component (or first time since a previous
+        // reaction from an abandoned render was disposed).
+
+        const newReaction = new Reaction(observerComponentNameFor(baseComponentName), () => {
+            // Observable has changed, meaning we want to re-render
+            // BUT if we're a component that hasn't yet got to the useEffect()
+            // stage, we might be a component that _started_ to render, but
+            // got dropped, and we don't want to make state changes then.
+            // (It triggers warnings in StrictMode, for a start.)
+            if (trackingData.mounted) {
+                // We have reached useEffect(), so we're mounted, and can trigger an update
+                forceUpdate()
+            } else {
+                // We haven't yet reached useEffect(), so we'll need to trigger a re-render
+                // when (and if) useEffect() arrives.
+                trackingData.changedBeforeMount = true
+            }
+        })
+
+        const trackingData = addReactionToTrack(
+            reactionTrackingRef,
+            newReaction,
+            objectRetainedByReact
+        )
+    }
+
+    const { reaction } = reactionTrackingRef.current!
+    React.useDebugValue(reaction, printDebugValue)
+
+    React.useEffect(() => {
+        // Called on first mount only
+        recordReactionAsCommitted(reactionTrackingRef)
+
+        if (reactionTrackingRef.current) {
+            // Great. We've already got our reaction from our render;
+            // all we need to do is to record that it's now mounted,
+            // to allow future observable changes to trigger re-renders
+            reactionTrackingRef.current.mounted = true
+            // Got a change before first mount, force an update
+            if (reactionTrackingRef.current.changedBeforeMount) {
+                reactionTrackingRef.current.changedBeforeMount = false
+                forceUpdate()
+            }
+        } else {
+            // The reaction we set up in our render has been disposed.
+            // This can be due to bad timings of renderings, e.g. our
+            // component was paused for a _very_ long time, and our
+            // reaction got cleaned up
+
+            // Re-create the reaction
+            reactionTrackingRef.current = {
+                reaction: new Reaction(observerComponentNameFor(baseComponentName), () => {
+                    // We've definitely already been mounted at this point
+                    forceUpdate()
+                }),
+                mounted: true,
+                changedBeforeMount: false,
+                cleanAt: Infinity
+            }
+            forceUpdate()
+        }
+
+        return () => {
+            reactionTrackingRef.current!.reaction.dispose()
+            reactionTrackingRef.current = null
+        }
+    }, [])
+
+    // render the original component, but have the
+    // reaction track the observables, so that rendering
+    // can be invalidated (see above) once a dependency changes
+    let rendering!: T
+    let exception
+    reaction.track(() => {
+        try {
+            rendering = fn()
+        } catch (e) {
+            exception = e
+        }
+    })
+
+    if (exception) {
+        throw exception // re-throw any exceptions caught during rendering
+    }
+
+    return rendering
+}
diff --git a/node_modules/mobx-react-lite/src/utils/FinalizationRegistryWrapper.ts b/node_modules/mobx-react-lite/src/utils/FinalizationRegistryWrapper.ts
new file mode 100644
index 0000000..d110063
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/FinalizationRegistryWrapper.ts
@@ -0,0 +1,12 @@
+declare class FinalizationRegistryType<T> {
+    constructor(cleanup: (cleanupToken: T) => void)
+    register(object: object, cleanupToken: T, unregisterToken?: object): void
+    unregister(unregisterToken: object): void
+}
+
+declare const FinalizationRegistry: typeof FinalizationRegistryType | undefined
+
+const FinalizationRegistryLocal =
+    typeof FinalizationRegistry === "undefined" ? undefined : FinalizationRegistry
+
+export { FinalizationRegistryLocal as FinalizationRegistry }
diff --git a/node_modules/mobx-react-lite/src/utils/assertEnvironment.ts b/node_modules/mobx-react-lite/src/utils/assertEnvironment.ts
new file mode 100644
index 0000000..339dfb2
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/assertEnvironment.ts
@@ -0,0 +1,9 @@
+import { makeObservable } from "mobx"
+import { useState } from "react"
+
+if (!useState) {
+    throw new Error("mobx-react-lite requires React with Hooks support")
+}
+if (!makeObservable) {
+    throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available")
+}
diff --git a/node_modules/mobx-react-lite/src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts b/node_modules/mobx-react-lite/src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts
new file mode 100644
index 0000000..44f2038
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/createReactionCleanupTrackingUsingFinalizationRegister.ts
@@ -0,0 +1,57 @@
+import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from "./FinalizationRegistryWrapper"
+import { Reaction } from "mobx"
+import {
+    ReactionCleanupTracking,
+    IReactionTracking,
+    createTrackingData
+} from "./reactionCleanupTrackingCommon"
+
+/**
+ * FinalizationRegistry-based uncommitted reaction cleanup
+ */
+export function createReactionCleanupTrackingUsingFinalizationRegister(
+    FinalizationRegistry: NonNullable<typeof FinalizationRegistryMaybeUndefined>
+): ReactionCleanupTracking {
+    const cleanupTokenToReactionTrackingMap = new Map<number, IReactionTracking>()
+    let globalCleanupTokensCounter = 1
+
+    const registry = new FinalizationRegistry(function cleanupFunction(token: number) {
+        const trackedReaction = cleanupTokenToReactionTrackingMap.get(token)
+        if (trackedReaction) {
+            trackedReaction.reaction.dispose()
+            cleanupTokenToReactionTrackingMap.delete(token)
+        }
+    })
+
+    return {
+        addReactionToTrack(
+            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,
+            reaction: Reaction,
+            objectRetainedByReact: object
+        ) {
+            const token = globalCleanupTokensCounter++
+
+            registry.register(objectRetainedByReact, token, reactionTrackingRef)
+            reactionTrackingRef.current = createTrackingData(reaction)
+            reactionTrackingRef.current.finalizationRegistryCleanupToken = token
+            cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current)
+
+            return reactionTrackingRef.current
+        },
+        recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>) {
+            registry.unregister(reactionRef)
+
+            if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
+                cleanupTokenToReactionTrackingMap.delete(
+                    reactionRef.current.finalizationRegistryCleanupToken
+                )
+            }
+        },
+        forceCleanupTimerToRunNowForTests() {
+            // When FinalizationRegistry in use, this this is no-op
+        },
+        resetCleanupScheduleForTests() {
+            // When FinalizationRegistry in use, this this is no-op
+        }
+    }
+}
diff --git a/node_modules/mobx-react-lite/src/utils/createTimerBasedReactionCleanupTracking.ts b/node_modules/mobx-react-lite/src/utils/createTimerBasedReactionCleanupTracking.ts
new file mode 100644
index 0000000..cb00c7b
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/createTimerBasedReactionCleanupTracking.ts
@@ -0,0 +1,122 @@
+import { Reaction } from "mobx"
+import {
+    ReactionCleanupTracking,
+    IReactionTracking,
+    CLEANUP_TIMER_LOOP_MILLIS,
+    createTrackingData
+} from "./reactionCleanupTrackingCommon"
+
+/**
+ * timers, gc-style, uncommitted reaction cleanup
+ */
+export function createTimerBasedReactionCleanupTracking(): ReactionCleanupTracking {
+    /**
+     * Reactions created by components that have yet to be fully mounted.
+     */
+    const uncommittedReactionRefs: Set<React.MutableRefObject<IReactionTracking | null>> = new Set()
+
+    /**
+     * Latest 'uncommitted reactions' cleanup timer handle.
+     */
+    let reactionCleanupHandle: ReturnType<typeof setTimeout> | undefined
+
+    /* istanbul ignore next */
+    /**
+     * Only to be used by test functions; do not export outside of mobx-react-lite
+     */
+    function forceCleanupTimerToRunNowForTests() {
+        // This allows us to control the execution of the cleanup timer
+        // to force it to run at awkward times in unit tests.
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle)
+            cleanUncommittedReactions()
+        }
+    }
+
+    /* istanbul ignore next */
+    function resetCleanupScheduleForTests() {
+        if (uncommittedReactionRefs.size > 0) {
+            for (const ref of uncommittedReactionRefs) {
+                const tracking = ref.current
+                if (tracking) {
+                    tracking.reaction.dispose()
+                    ref.current = null
+                }
+            }
+            uncommittedReactionRefs.clear()
+        }
+
+        if (reactionCleanupHandle) {
+            clearTimeout(reactionCleanupHandle)
+            reactionCleanupHandle = undefined
+        }
+    }
+
+    function ensureCleanupTimerRunning() {
+        if (reactionCleanupHandle === undefined) {
+            reactionCleanupHandle = setTimeout(cleanUncommittedReactions, CLEANUP_TIMER_LOOP_MILLIS)
+        }
+    }
+
+    function scheduleCleanupOfReactionIfLeaked(
+        ref: React.MutableRefObject<IReactionTracking | null>
+    ) {
+        uncommittedReactionRefs.add(ref)
+
+        ensureCleanupTimerRunning()
+    }
+
+    function recordReactionAsCommitted(
+        reactionRef: React.MutableRefObject<IReactionTracking | null>
+    ) {
+        uncommittedReactionRefs.delete(reactionRef)
+    }
+
+    /**
+     * Run by the cleanup timer to dispose any outstanding reactions
+     */
+    function cleanUncommittedReactions() {
+        reactionCleanupHandle = undefined
+
+        // Loop through all the candidate leaked reactions; those older
+        // than CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS get tidied.
+
+        const now = Date.now()
+        uncommittedReactionRefs.forEach(ref => {
+            const tracking = ref.current
+            if (tracking) {
+                if (now >= tracking.cleanAt) {
+                    // It's time to tidy up this leaked reaction.
+                    tracking.reaction.dispose()
+                    ref.current = null
+                    uncommittedReactionRefs.delete(ref)
+                }
+            }
+        })
+
+        if (uncommittedReactionRefs.size > 0) {
+            // We've just finished a round of cleanups but there are still
+            // some leak candidates outstanding.
+            ensureCleanupTimerRunning()
+        }
+    }
+
+    return {
+        addReactionToTrack(
+            reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,
+            reaction: Reaction,
+            /**
+             * On timer based implementation we don't really need this object,
+             * but we keep the same api
+             */
+            objectRetainedByReact: unknown
+        ) {
+            reactionTrackingRef.current = createTrackingData(reaction)
+            scheduleCleanupOfReactionIfLeaked(reactionTrackingRef)
+            return reactionTrackingRef.current
+        },
+        recordReactionAsCommitted,
+        forceCleanupTimerToRunNowForTests,
+        resetCleanupScheduleForTests
+    }
+}
diff --git a/node_modules/mobx-react-lite/src/utils/observerBatching.ts b/node_modules/mobx-react-lite/src/utils/observerBatching.ts
new file mode 100644
index 0000000..42ce876
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/observerBatching.ts
@@ -0,0 +1,25 @@
+import { configure } from "mobx"
+
+export function defaultNoopBatch(callback: () => void) {
+    callback()
+}
+
+export function observerBatching(reactionScheduler: any) {
+    if (!reactionScheduler) {
+        reactionScheduler = defaultNoopBatch
+        if ("production" !== process.env.NODE_ENV) {
+            console.warn(
+                "[MobX] Failed to get unstable_batched updates from react-dom / react-native"
+            )
+        }
+    }
+    configure({ reactionScheduler })
+}
+
+export const isObserverBatched = () => {
+    if ("production" !== process.env.NODE_ENV) {
+        console.warn("[MobX] Deprecated")
+    }
+
+    return true
+}
diff --git a/node_modules/mobx-react-lite/src/utils/printDebugValue.ts b/node_modules/mobx-react-lite/src/utils/printDebugValue.ts
new file mode 100644
index 0000000..8ef487f
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/printDebugValue.ts
@@ -0,0 +1,5 @@
+import { getDependencyTree, Reaction } from "mobx"
+
+export function printDebugValue(v: Reaction) {
+    return getDependencyTree(v)
+}
diff --git a/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.native.ts b/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.native.ts
new file mode 100644
index 0000000..a8e25fb
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.native.ts
@@ -0,0 +1,2 @@
+// @ts-ignore
+export { unstable_batchedUpdates } from "react-native"
diff --git a/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.ts b/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.ts
new file mode 100644
index 0000000..8c64462
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/reactBatchedUpdates.ts
@@ -0,0 +1 @@
+export { unstable_batchedUpdates } from "react-dom"
diff --git a/node_modules/mobx-react-lite/src/utils/reactionCleanupTracking.ts b/node_modules/mobx-react-lite/src/utils/reactionCleanupTracking.ts
new file mode 100644
index 0000000..1aeffbd
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/reactionCleanupTracking.ts
@@ -0,0 +1,20 @@
+import { FinalizationRegistry as FinalizationRegistryMaybeUndefined } from "./FinalizationRegistryWrapper"
+import { createReactionCleanupTrackingUsingFinalizationRegister } from "./createReactionCleanupTrackingUsingFinalizationRegister"
+import { createTimerBasedReactionCleanupTracking } from "./createTimerBasedReactionCleanupTracking"
+export { IReactionTracking } from "./reactionCleanupTrackingCommon"
+
+const {
+    addReactionToTrack,
+    recordReactionAsCommitted,
+    resetCleanupScheduleForTests,
+    forceCleanupTimerToRunNowForTests
+} = FinalizationRegistryMaybeUndefined
+    ? createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistryMaybeUndefined)
+    : createTimerBasedReactionCleanupTracking()
+
+export {
+    addReactionToTrack,
+    recordReactionAsCommitted,
+    resetCleanupScheduleForTests,
+    forceCleanupTimerToRunNowForTests
+}
diff --git a/node_modules/mobx-react-lite/src/utils/reactionCleanupTrackingCommon.ts b/node_modules/mobx-react-lite/src/utils/reactionCleanupTrackingCommon.ts
new file mode 100644
index 0000000..e0aa149
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/reactionCleanupTrackingCommon.ts
@@ -0,0 +1,72 @@
+import { Reaction } from "mobx"
+
+export function createTrackingData(reaction: Reaction) {
+    const trackingData: IReactionTracking = {
+        reaction,
+        mounted: false,
+        changedBeforeMount: false,
+        cleanAt: Date.now() + CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS
+    }
+    return trackingData
+}
+
+/**
+ * Unified api for timers/Finalization registry cleanups
+ * This abstraction make useObserver much simpler
+ */
+export interface ReactionCleanupTracking {
+    /**
+     *
+     * @param reaction The reaction to cleanup
+     * @param objectRetainedByReact This will be in actual use only when FinalizationRegister is in use
+     */
+    addReactionToTrack(
+        reactionTrackingRef: React.MutableRefObject<IReactionTracking | null>,
+        reaction: Reaction,
+        objectRetainedByReact: object
+    ): IReactionTracking
+    recordReactionAsCommitted(reactionRef: React.MutableRefObject<IReactionTracking | null>): void
+    forceCleanupTimerToRunNowForTests(): void
+    resetCleanupScheduleForTests(): void
+}
+
+export interface IReactionTracking {
+    /** The Reaction created during first render, which may be leaked */
+    reaction: Reaction
+    /**
+     * The time (in ticks) at which point we should dispose of the reaction
+     * if this component hasn't yet been fully mounted.
+     */
+    cleanAt: number
+
+    /**
+     * Whether the component has yet completed mounting (for us, whether
+     * its useEffect has run)
+     */
+    mounted: boolean
+
+    /**
+     * Whether the observables that the component is tracking changed between
+     * the first render and the first useEffect.
+     */
+    changedBeforeMount: boolean
+
+    /**
+     * In case we are using finalization registry based cleanup,
+     * this will hold the cleanup token associated with this reaction
+     */
+    finalizationRegistryCleanupToken?: number
+}
+
+/**
+ * The minimum time before we'll clean up a Reaction created in a render
+ * for a component that hasn't managed to run its effects. This needs to
+ * be big enough to ensure that a component won't turn up and have its
+ * effects run without being re-rendered.
+ */
+export const CLEANUP_LEAKED_REACTIONS_AFTER_MILLIS = 10_000
+
+/**
+ * The frequency with which we'll check for leaked reactions.
+ */
+export const CLEANUP_TIMER_LOOP_MILLIS = 10_000
diff --git a/node_modules/mobx-react-lite/src/utils/utils.ts b/node_modules/mobx-react-lite/src/utils/utils.ts
new file mode 100644
index 0000000..50e4173
--- /dev/null
+++ b/node_modules/mobx-react-lite/src/utils/utils.ts
@@ -0,0 +1,8 @@
+const deprecatedMessages: string[] = []
+
+export function useDeprecated(msg: string) {
+    if (!deprecatedMessages.includes(msg)) {
+        deprecatedMessages.push(msg)
+        console.warn(msg)
+    }
+}
diff --git a/node_modules/mobx-react/CHANGELOG.md b/node_modules/mobx-react/CHANGELOG.md
new file mode 100644
index 0000000..847f6c6
--- /dev/null
+++ b/node_modules/mobx-react/CHANGELOG.md
@@ -0,0 +1,708 @@
+# mobx-react
+
+## 7.2.1
+
+### Patch Changes
+
+-   [`8a1ff856`](https://github.com/mobxjs/mobx/commit/8a1ff856043d59396f623f8ca209822b1331d85f) [#3103](https://github.com/mobxjs/mobx/pull/3103) Thanks [@urugator](https://github.com/urugator)! - Missing `render` on component prototype throws.
+
+## 7.2.0
+
+### Minor Changes
+
+-   [`87b3e1de`](https://github.com/mobxjs/mobx/commit/87b3e1de58069617a39552d71a4d5c5c134cbbaf) [#2930](https://github.com/mobxjs/mobx/pull/2930) Thanks [@vkrol](https://github.com/vkrol)! - inject shouldn't change original displayName of component that uses forwardRef
+
+## 7.1.0
+
+### Patch Changes
+
+-   Updated dependencies [[`28f8a11d`](https://github.com/mobxjs/mobx/commit/28f8a11d8b94f1aca2eec4ae9c5f45c5ea2f4362)]:
+    -   mobx@6.1.0
+    -   mobx-react-lite@4.0.0
+
+## 7.0.6
+
+### Patch Changes
+
+-   [`592e6e99`](https://github.com/mobxjs/mobx/commit/592e6e996c2d5264e162cfb0921a071c1d815c92) [#2743](https://github.com/mobxjs/mobx/pull/2743) Thanks [@vkrol](https://github.com/vkrol)! - Remove `sideEffects` section in `mobx-react-lite` `package.json`
+
+-   Updated dependencies [[`6b304232`](https://github.com/mobxjs/mobx/commit/6b30423266e5418a3f20389d0bd0eae31f3384d2), [`83b84fd3`](https://github.com/mobxjs/mobx/commit/83b84fd354f2253fdd8ea556e217a92fc2633c00), [`65c7b73b`](https://github.com/mobxjs/mobx/commit/65c7b73b7f0b1a69a1a2786b5f484419d129d10b), [`989390d4`](https://github.com/mobxjs/mobx/commit/989390d46bbe9941b61ac6c6d1292f96445e7cc3), [`dea1cf18`](https://github.com/mobxjs/mobx/commit/dea1cf189b0f43929f4f626229d34a80bd10212e), [`592e6e99`](https://github.com/mobxjs/mobx/commit/592e6e996c2d5264e162cfb0921a071c1d815c92)]:
+    -   mobx@6.0.5
+    -   mobx-react-lite@3.1.7
+
+## 7.0.5
+
+### Patch Changes
+
+-   [`2f3dcb27`](https://github.com/mobxjs/mobx/commit/2f3dcb274f795ffca4ae724b6b4795958620838d) Thanks [@FredyC](https://github.com/FredyC)! - Fix names of UMD exports [#2517](https://github.com/mobxjs/mobx/issues/2617)
+
+-   Updated dependencies [[`2f3dcb27`](https://github.com/mobxjs/mobx/commit/2f3dcb274f795ffca4ae724b6b4795958620838d), [`79a09f49`](https://github.com/mobxjs/mobx/commit/79a09f49a9f2baddbab8d89e9a7ac07cffadf624)]:
+    -   mobx-react-lite@3.1.6
+    -   mobx@6.0.4
+
+## 7.0.4
+
+### Patch Changes
+
+-   [`8bbbc7c0`](https://github.com/mobxjs/mobx/commit/8bbbc7c0df77cd79530add5db2d6a04cfe6d84b1) Thanks [@FredyC](https://github.com/FredyC)! - Fix names of dist files (for real now). Third time is the charm 😅
+
+-   Updated dependencies [[`8bbbc7c0`](https://github.com/mobxjs/mobx/commit/8bbbc7c0df77cd79530add5db2d6a04cfe6d84b1)]:
+    -   mobx-react-lite@3.1.4
+
+## 7.0.3
+
+### Patch Changes
+
+-   [`b7aa9d35`](https://github.com/mobxjs/mobx/commit/b7aa9d35432888ee5dd80a6c9dcbc18b04a0346c) Thanks [@FredyC](https://github.com/FredyC)! - Fixed wrong package name for dist files
+
+-   Updated dependencies [[`b7aa9d35`](https://github.com/mobxjs/mobx/commit/b7aa9d35432888ee5dd80a6c9dcbc18b04a0346c)]:
+    -   mobx-react-lite@3.1.3
+
+## 7.0.2
+
+### Patch Changes
+
+-   [`5239db80`](https://github.com/mobxjs/mobx/commit/5239db80cf000026906c28a035725933d4dd6823) Thanks [@FredyC](https://github.com/FredyC)! - Fixed release with missing dist files
+
+-   Updated dependencies [[`5239db80`](https://github.com/mobxjs/mobx/commit/5239db80cf000026906c28a035725933d4dd6823)]:
+    -   mobx-react-lite@3.1.2
+
+## 7.0.1
+
+### Patch Changes
+
+-   [`81a2f865`](https://github.com/mobxjs/mobx/commit/81a2f8654d9656e2e831176e45cbf926fbc364e0) Thanks [@FredyC](https://github.com/FredyC)! - ESM bundles without NODE_ENV present are available in dist folder. This useful for consumption in browser environment that supports ESM Choose either `esm.production.min.js` or `esm.development.js` from `dist` folder.
+
+-   Updated dependencies [[`81a2f865`](https://github.com/mobxjs/mobx/commit/81a2f8654d9656e2e831176e45cbf926fbc364e0)]:
+    -   mobx-react-lite@3.1.1
+
+## 7.0.0
+
+Release for compatibility with MobX v6
+
+## 6.3.1
+
+### Patch Changes
+
+-   [`aa780c0`](https://github.com/mobxjs/mobx-react/commit/aa780c07162be99e198e7bbdbd6465c1f451f1d6) [#908](https://github.com/mobxjs/mobx-react/pull/908) Thanks [@FredyC](https://github.com/FredyC)! - Initial setup of [changesets](https://github.com/atlassian/changesets). No code changes present.
+
+## 6.3.0
+
+-   Updated mobx-react-lite to 2.2.0 which removes the need to manually configure batching. Fixes [#859](https://github.com/mobxjs/mobx-react/issues/859)
+
+## 6.2.4
+
+-   Fix error thrown in the already defined observer class component warning message when attempting to get the components display name. [#887](https://github.com/mobxjs/mobx-react/issues/887)
+
+## 6.2.3
+
+-   Log warning if class component is already an observer to prevent memory leaks. [#839](https://github.com/mobxjs/mobx-react/issues/839)
+-   Fix disposeOnUnmount when using react-hot-loader. [#725](https://github.com/mobxjs/mobx-react/issues/725)
+
+## 6.2.2
+
+-   Observer batching imports are kept in production builds as side effects ([see issue](https://github.com/mobxjs/mobx-react-lite/issues/273))
+
+## 6.2.1
+
+-   Remove auto configured observer batching using react-dom. Fixes: [#852](https://github.com/mobxjs/mobx-react/issues/852).
+
+## 6.2.0
+
+-   Updated to latest mobx-react-lite V2 for compatibility with `React.StrictMode`.
+-   Observer batching (see more [in the docs](https://github.com/mobxjs/mobx-react-lite/#observer-batching)).
+-   Possibly breaking change, the `dist/mobxreact.rn.module.js` is no longer available, use `dist/mobxreact.esm.js` instead.
+
+## 6.1.6 / 6.1.7
+
+-   Fix an issue with class components & observableRequiresReaction. [#806](https://github.com/mobxjs/mobx-react/issues/806) through [#829](https://github.com/mobxjs/mobx-react/pull/829)
+-   Use TSDX for building to mitigate issues with accessing `process.env` [#821](https://github.com/mobxjs/mobx-react/pull/821)
+
+## 6.1.5
+
+-   Added check if `process.env` is available, fixes [#801](https://github.com/mobxjs/mobx-react/issues/801) through [#812](https://github.com/mobxjs/mobx-react/pull/812) by [@ynejati](https://github.com/ynejati)
+-   Added warning if component's `render` method is accidentally overwritten. [#799](https://github.com/mobxjs/mobx-react/pull/799) by [@Venryx](https://github.com/Venryx). Helps prevent memory leaks as in: [#797](https://github.com/mobxjs/mobx-react/issues/797)
+
+## 6.1.4
+
+-   Update dependency mobx-react-lite@1.4.2 which includes fix for [RN Fast Refresh](https://github.com/mobxjs/mobx-react-lite/issues/226)
+
+## 6.1.2 / 6.1.3
+
+-   Add reexport of `useObserver` from `mobx-react-lite` [#734](https://github.com/mobxjs/mobx-react/issues/734)
+-   Add the ability to pass multiple children to Provider
+-   Fixed [#717](https://github.com/mobxjs/mobx-react/issues/717). Now `inject` works correctly with components that use `React.forwardRef`
+-   Observer checks for use of React.memo [#720](https://github.com/mobxjs/mobx-react/issues/720)
+-   Get rid of the redundant Injector wrapper [#716](https://github.com/mobxjs/mobx-react/pull/716)
+
+## 6.1.1
+
+-   Fixed issue where combining `@disposeOnUnmount` with `disposeOnUnmount` didn't clean up everything. Fixes [#666](https://github.com/mobxjs/mobx-react/issues/666) trough [#671](https://github.com/mobxjs/mobx-react/pull/671) by [@JabX](https://github.com/JabX)
+
+## 6.1.0
+
+-   Restored the classic implementation of `observer`: class based components are patched again, rather than wrapping them in `<Observer>`, see [#703](https://github.com/mobxjs/mobx-react/pull/703). Fixes:
+    -   `componentDidUpdate` not being triggered after a reactive render [#692](https://github.com/mobxjs/mobx-react/issues/692)
+    -   The appearance of an additional `<Observer>` component in the component tree, which complicates shallow testing [#699](https://github.com/mobxjs/mobx-react/issues/699)
+    -   Some regressions in `disposeOnUnmount` [#702](https://github.com/mobxjs/mobx-react/issues/702)
+    -   Note that dev tool support, and other constraints mentioned in the 6.0.0 release notes have not been restored.
+-   The function `useStaticRendering(value: boolean): void` from mobx-react-lite is now exposed
+
+## 6.0.4
+
+-   Fixed IE 11 compatibility which was accidentally broken. Fixes [#698](https://github.com/mobxjs/mobx-react/issues/698)
+
+## 6.0.3
+
+-   `disposeOnUnmount` now supports initializing it with an array of disposers. Fixes [#637](https://github.com/mobxjs/mobx-react/pull/637) through [#641](https://github.com/mobxjs/mobx-react/pull/641) by [@Amareis](https://github.com/Amareis)
+-   Fixed hoisting of statically declared members. Fixes [#678](https://github.com/mobxjs/mobx-react/issues/678) through [#682](https://github.com/mobxjs/mobx-react/pull/682) by [@meabed](https://github.com/meabed)
+
+## 6.0.2
+
+-   Added missing types for `MobXProviderContext`, `useLocalStore` and `useAsObservableSource`. Fixes #679.
+
+## 6.0.0
+
+**Breaking changes**
+
+-   The minimal supported version of React is 16.8.0
+-   Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecated for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`.
+-   `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries.
+-   `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](https://github.com/42shadow42))
+-   Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been designed to inject final values into the tree. (That is, constanted references, the injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning`flag for`Provider` has been dropped.
+-   The third argument of custom `storesToProps` functions passed to `inject` is no longer available.
+-   `<Observer>` no longer supports the deprecated `inject` property.
+-   Defining `shouldComponentUpdate` on `observer` based components is no longer supported
+-   `propTypes` is no longer exposed, use `PropTypes` instead
+-   `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`.
+-   The `onError` global error handler has been removed. Use error boundaries instead.
+-   Improved dev tool names for `inject` wrapped components, see [#472](https://github.com/mobxjs/mobx-react/pull/472) by [SimeonC](https://github.com/SimeonC). Fixes [#466](https://github.com/mobxjs/mobx-react/issues/466)
+-   Dropped support for a build of mobx-react that doesn't target either `react-dom` or `react-native`. mobx-react doesn't need `react-dom` to be present, but to make sure your build tools don't fail, you might want to stub `react-dom` as an empty module.
+-   The `componentWillReact` has been dropped
+-   The MobX-react devtools (either as package or browser plugin) are no longer supported. Instead, the following tools can be analyzed to analyze your mobx-react application:
+    -   Visualizing re-rendering of components is now part of the standard React devtools
+    -   The dependency tree of a compent tree can be inspected by showing the state of the `useObserver` hook in the React devtools (at the time of this release it displays as just `Object`, but the next iteration of the React devtools will support those properly)
+    -   Spying on events can still be done with the [MobX-react browser plugin](https://github.com/mobxjs/mobx-devtools), through the [mobx-logger](https://github.com/winterbe/mobx-logger) package or manually by using the `spy` or `trace` utility from the mobx package.
+
+**Improvements**
+
+-   Hook based components are now supported by mobx-react (in fact, the package is now implemented using hooks)
+-   Class based `observer` components are now _recommended_ to extend `React.PureComponent`. Functional `observer` components are now automatically wrapped in `React.memo` internally. See section in [README](https://mobx.js.org/README.html#observercomponentclass) for more details.
+-   For `observer` based components, there will now be an additional `Observer` component in the tree.
+-   Two new hooks have been exposed, in case you want to manage local state in observable: `useLocalStore` and `useAsObservableSource`.
+-   `MobXProviderContext` is now exposed from the package, in case you want to consume the context used by `Provider` with a `useContext` hook.
+
+## 5.4.3
+
+-   Fixed [#612](https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case.
+
+## 5.4.1 / 5.4.2
+
+-   Fixed issue where `react-is` wasn't properly rolled-up into the package. Fixes [#608](https://github.com/mobxjs/mobx-react/issues/608)
+
+## 5.4.0
+
+-   Added support for forward refs, fixes [#602](https://github.com/mobxjs/mobx-react/issues/602)
+
+## 5.3.6
+
+-   Fixed some additional issues around life-cycle patching, take 3. See [#536](https://github.com/mobxjs/mobx-react/pull/586) by [@xaviergonz](https://github.com/xaviergonz). Fixed [#579](https://github.com/mobxjs/mobx-react/issues/579)
+
+## 5.3.5
+
+-   Fixed some additional issues around life-cycle patching, see [#583](https://github.com/mobxjs/mobx-react/pull/583) by [@xaviergonz](https://github.com/xaviergonz). Fixed [#581](https://github.com/mobxjs/mobx-react/issues/581)
+
+## 5.3.4
+
+-   Fixed unending recursing as a result of lifecylce patching. Fixes [#579](https://github.com/mobxjs/mobx-react/issues/579) through [#582](https://github.com/mobxjs/mobx-react/pull/582) by [@xaviergonz](https://github.com/xaviergonz)
+
+## 5.3.3
+
+-   Fixed `Cannot read property 'forEach' of undefined` exception if `disposeOnUnmount` was called conditionally. [#578](https://github.com/mobxjs/mobx-react/pull/578) by [Jef Hellemans](https://github.com/JefHellemans)
+
+## 5.3.2
+
+-   Fixed: "process not defined", [#574](https://github.com/mobxjs/mobx-react/pull/574/) through [#576](https://github.com/mobxjs/mobx-react/pull/576/) by [@xaviergonz](https://github.com/xaviergonz)
+
+## 5.3.0 / 5.3.1
+
+_5.3.0 was retracted as files were not generated correctly during publish_
+
+-   Added `disposeOnUnmount` utility / decorator to call disposable properties (reaction, autorun, etc) automatically on `componentWillUnmount`
+-   Introduced new method to patch lifecycle methods which should be more compatible with for example arrow functions.
+
+## 5.2.8
+
+-   Make sure `mobx-react` doesn't require `Object.assign` polyfill
+
+## 5.2.7
+
+-   Fixed issue where React 16.5 printed a warning when using `Provider`, fixes [#545](https://github.com/mobxjs/mobx-react/issues/545)
+
+## 5.2.6
+
+-   Fixed bug in defining properties (although the bug had no known observable effect). Fixes [#540](https://github.com/mobxjs/mobx-react/issues/540)
+
+## 5.2.4 / 5.2.5
+
+-   Improved compatibility with React-Hot-Loader, see [#522](https://github.com/mobxjs/mobx-react/pull/522) by [theKashey](https://github.com/theKashey). Fixes [#500](https://github.com/mobxjs/mobx-react/issues/500)
+
+## 5.2.3
+
+-   Fixed problem with `Symbol` feature detection. By [@Strate](https://github.com/Strate) through [#501](https://github.com/mobxjs/mobx-react/pull/501). Fixes [#498](https://github.com/mobxjs/mobx-react/issues/498) and [#503](https://github.com/mobxjs/mobx-react/issues/503).
+
+## 5.2.2
+
+-   Polyfill `Symbol` if it doesn't exist. By [@Strate](https://github.com/Strate) through [#499](https://github.com/mobxjs/mobx-react/pull/499).
+
+## 5.2.1
+
+-   Component `props` and `state` properties are now made observable during the instance creation. This restores the behavior from before 5.1.0 where `props` and `state` could safely be observed during mount. Actually it is now possible to do similar things in constructors as well. Fixes [#478](https://github.com/mobxjs/mobx-react/issues/478). Thanks [@Strate](https://github.com/Strate) for the idea and PR! [#496](https://github.com/mobxjs/mobx-react/pull/496).
+
+## 5.2.0
+
+-   Added backward compatible support for MobX 5.
+-   Fixed components sometimes being displayed as `undefined` in mobx-devtools. See [#470](https://github.com/mobxjs/mobx-react/pull/470) by [@MauricioAndrades](https://github.com/MauricioAndrades)
+-   Removed unnecessary warning `@observer` was used both on a sub and super class. See [#492](https://github.com/mobxjs/mobx-react/pull/476) by [@skiritsis](https://github.com/skiritsis). _N.B. putting `@observer` on a super and subclass is still not an supported pattern, use @observer on subclasses only!_
+
+## 5.1.2
+
+-   Fixed regression bug in integration with devtools. Fixed through [#465](https://github.com/mobxjs/mobx-react/pull/465) by @le0nik
+
+## 5.1.0
+
+-   Added support for React 16.3, including support for the `getDerivedStateFromProps` life-cycle hook. MobX will no longer use `componentWillMount` hook internally, so that it can be used in `StrictMode` react as well. Fixes [#447](https://github.com/mobxjs/mobx-react/issues/447)
+-   Static properties of a function component are now automatically hoisted when the component is wrapped by `observer`. Implements [#427](https://github.com/mobxjs/mobx-react/pull/427)
+-   Misspelled export `componentByNodeRegistery` is now properly export as `componentByNodeRegistry` as well, please update consumers, the mispelled version will be dropped in the next major. Fixes [#421](https://github.com/mobxjs/mobx-react/issues/421)
+-   Deprecated the support for the `inject` property on `Observer`, it is fundamentally broken and should not be used. Use `inject` on the enclosing component instead and grab the necessary stores from the closure. Fixes [#423](https://github.com/mobxjs/mobx-react/issues/423)
+-   Added warning about using `observer` on a React.PureComponent, this will become an exception in the next major. Fixes [#309](https://github.com/mobxjs/mobx-react/issues/309)
+-   Mobx-react will now print a warning when combining `observer` with a custom `shouldComponentUpdate` implementation. Fixes [#417](https://github.com/mobxjs/mobx-react/issues/417)
+
+## 5.0.0
+
+-   Added compatibility with MobX 4.x. This version is not compatible with older Mobx versions
+
+## 4.4.3
+
+-   The exposed React Native build now uses commonjs, to prevent the need of further transpilation. Fixes [#428](https://github.com/mobxjs/mobx-react/issues/428)
+
+## 4.4.2
+
+-   Fixed issue with mobx-react not compiling on react-native due to the presence of a `.babelrc` file. Fixes [#415](https://github.com/mobxjs/mobx-react/issues/415) by [Ryan Rampersad](https://github.com/ryanmr) through [#416](https://github.com/mobxjs/mobx-react/pull/416)
+
+## 4.4.1
+
+-   Fixed syntax error in 4.4.0 that escaped
+
+## 4.4.0
+
+-   `Observer` now supports render props, `render` and `inject`. See the updated readme. By [ZiYingMai](https://github.com/Sunshine168) through [#403](https://github.com/mobxjs/mobx-react/pull/403)
+-   Fixed: `NaN` is now considered to be equal to `NaN` when doing reconciliation. Fixes [#363](https://github.com/mobxjs/mobx-react/issues/363), by [Andrew Branch](https://github.com/andrewbranch) through [#402](https://github.com/mobxjs/mobx-react/pull/402)
+-   Improved typings of `Observer` component, by [Rafał Filipek](https://github.com/RafalFilipek) through [#376](https://github.com/mobxjs/mobx-react/pull/376)
+-   Fixed incorrect generation of component name, by [Andy Kogut](https://github.com/andykog) through [#368](https://github.com/mobxjs/mobx-react/pull/368)
+-   Lot of internal repo upgrades: Test suite is now in Jest, Prettier is used etc.
+
+## 4.3.5
+
+Fixed some issues with the typescript typings. See for example #353
+
+## 4.3.4
+
+Improved typescript typings, including support for `strict` mode in TS 2.6. Fixes
+
+## 4.3.3
+
+Added support for React 16. (No changes)
+
+## 4.3.2
+
+Killed accidentally exposed default exports.
+
+If you are still using `import mobxReact from "mobx-react"`, use `import * as mobxReact from "mobx-react"`, or better `import { whatYouNeed } from "mobx-react"` instead.
+
+## 4.3.1
+
+## 4.3.0 (unpublished)
+
+Improved module rollup setup, enabling better tree shaking. See #324 / #328
+
+## 4.2.2
+
+-   Fixed check for stateless components, by @leader22, see #280
+
+## 4.2.1
+
+_Note: Due to pull / rebase issue the release commit is incorrect. This is the released [commit](https://github.com/mobxjs/mobx-react/commit/f1b3eefc5239cb451b317204fa8aad94b4dcfc2f)_
+
+-   Reduced module size by 31% (switched to rollup.js). See #244 by @rossipedia
+-   Skip creation of `.wrappedInstance` reference for stateless components. See #254 by @farwayer
+-   Introduced global `onError` handler hook to be notified on errors thrown by `@observer` components. See #262 by @andykog
+-   Improved typescript typings of the exposed `propTypes`, See #263 by @panjiesw
+
+## 4.2.0
+
+-   Same as 4.2.1, but contained build issue and is unpublished
+
+## 4.1.8
+
+-   Undid change introduced in 4.1.4 where the lifecycle hooks were protected, as this breaks react-hot-loader.... Fixes #231
+
+## 4.1.7
+
+-   Added support for React 15.5 (no deprecation warnings) and 16.0 (no proptypes / createClass), by @andykog, see #238. Fixes #233, #237
+
+## 4.1.5
+
+-   Improved typescript typings, fixes #223
+
+## 4.1.4
+
+-   Made lifecycle hooks used by mobx-react read-only to make sure they are not accidentally overwritten in component instances. Fixes, #195, #202. Note that they can still be defined, just make sure to define them on the prototype (`componentWillMount() {}`) instead of the instance (`componentWillMount = () => {}`). Which is best practice anyway.
+
+## 4.1.3
+
+-   Fixed `ReactDOM.findDOMNode` exception when using react-test-runner, #216
+
+## 4.1.2
+
+-   Exceptions caught during render are now rethrown with proper stack, fixes #206
+
+## 4.1.1
+
+-   Exposed `wrappedInstance` and `wrappedComponent` in typings
+-   Fixed accidental use of `default` import from `mobx` package.
+
+## 4.1.0
+
+-   Added support for MobX3. Note that using MobX3 changes the error semantics. If an `observer` component throws, it will no longer crash the app, but just log the exceptions instead.
+
+## 4.0.4
+
+-   Introduced `suppressChangedStoreWarning` to optionally supresss change store warnings, by @dropfen, see #182, #183
+
+## 4.0.3
+
+-   Fixed issue where userland componentWilMount was run before observer componentWillMount
+
+## 4.0.2
+
+-   Fixed order of `inject` overloads, see #169
+-   Fixed import of `mobx` when using Webpack without commonjs plugin, see: #168
+
+## 4.0.1
+
+-   Improved typings, by @timmolendijk, fixes #164, #166
+-   Fixed `inject` signature in readme, by @farwayer
+
+## 4.0.0
+
+### `observer` now uses shallow comparision for all props _(Breaking change)_
+
+`observer` used to compare all properties shallow in the built-in _shouldComponentUpdate_, except when it received
+non-observable data structures.
+Because mobx-react cannot know whether a non observable has been deeply modified, it took no chances and just re-renders.
+
+However, the downside of this when an unchanged, non-observable object is passed in to an observer component again, it would still cause a re-render.
+Objects such as styling etc. To fix this mobx-react will now always compare all properties in a pure manner.
+In general this should cause no trouble, as typically mutable data in mobx based objects is captured in observable objects, which will still cause components to re-render if needed.
+
+If you need to pass in a deeply modified object and still want to make sure to cause a re-render, either
+
+-   make sure the object / array is an observable
+-   do not decorate your component with `observer`, but use `Observer` regions instead (see below)
+
+See [#160](https://github.com/mobxjs/mobx-react/issues/160) for more details.
+
+### `inject(fn)(component)` will now track `fn` as well
+
+`inject(func)` is now reactive as well, that means that transformations in the selector function will be tracked, see [#111](https://github.com/mobxjs/mobx-react/issues/111)
+
+```javascript
+const NameDisplayer = ({ name }) => <h1>{name}</h1>
+
+const UserNameDisplayer = inject(stores => ({
+    name: stores.userStore.name
+}))(NameDisplayer)
+
+const user = mobx.observable({
+    name: "Noa"
+})
+
+const App = () => (
+    <Provider userStore={user}>
+        <UserNameDisplayer />
+    </Provider>
+)
+
+ReactDOM.render(<App />, document.body)
+```
+
+_N.B. note that in this specific case NameDisplayer doesn't have to be an `observer`, as it doesn't receive observables, but just plain data from the transformer function._
+
+### `this.props` and `this.state` in React components are now observables as well
+
+A common cause of confusion were cases like:
+
+```javascript
+@observer class MyComponent() {
+    @computed upperCaseName() {
+        return this.props.user.name.toUpperCase()
+    }
+
+    render() {
+        return <h1>{this.upperCaseName}</h1>
+    }
+}
+```
+
+This component would re-render if `user.name` was modified, but it would still render the previous user's name if a complete new user was received!
+The reason for that is that in the above example the only observable tracked by the computed value is `user.name`, but not `this.props.user`.
+So a change to the first would be picked up, but a change in `props` itself, assigning a new user, not.
+
+Although this is technically correct, it was a source of confusion.
+For that reason `this.state` and `this.props` are now automatically converted to observables in any `observer` based react component.
+For more details, see [#136](https://github.com/mobxjs/mobx-react/pull/136) by @Strate
+
+### Better support for Server Side Rendering
+
+Introduced `useStaticRendering(boolean)` to better support server-side rendering scenarios. See [#140](https://github.com/mobxjs/mobx-react/issues/140)
+
+### Introduced `Observer` as alternative syntax to the `observer` decorator.
+
+_This feature is still experimental and might change in the next minor release, or be deprecated_
+
+Introduced `Observer`. Can be used as alternative to the `observer` decorator. Marks a component region as reactive.
+See the Readme / [#138](https://github.com/mobxjs/mobx-react/issues/138)
+Example:
+
+```javascript
+const UserNameDisplayer = ({ user }) => <Observer>{() => <div>{user.name}</div>}</Observer>
+```
+
+### Using `observer` to inject stores is deprecated
+
+The fact that `observer` could inject stores as well caused quite some confusion.
+Because in some cases `observer` would return the original component (when not inject), but it would return a HoC when injecting.
+To make this more consistent, you should always use `inject` to inject stores into a component. So use:
+
+```
+@inject("store1", "store2") @observer
+class MyComponent extends React.Component {
+```
+
+or:
+
+```
+const MyComponent = inject("store1", "store2")(observer(props => rendering))
+```
+
+For more info see the related [discussion](https://github.com/mobxjs/mobx-react/commit/666577b41b7af8209839e7b243064a31c9951632#commitcomment-19773706)
+
+### Other improvements
+
+-   If `mobx` and `mobx-react` are used in combination, all reactions are run as part of React's batched updates. This minimizes the work of the reconciler, guarantees optimal rendering order of components (if the rendering was not triggered from within a React event). Tnx @gkaemmer for the suggestion.
+-   It is now possible to directly define `propTypes` and `defaultProps` on components wrapped with `inject` (or `observer(["stores"])`) again, see #120, #142. Removed the warnings for this, and instead improved the docs.
+-   Clean up data subscriptions if an error is thrown by an `observer` component, see [#134](https://github.com/mobxjs/mobx-react/pull/134) by @andykog
+-   export `PropTypes` as well in typescript typings, fixes #153
+-   Add react as a peer dependency
+-   Added minified browser build: `index.min.js`, fixes #147
+-   Generate better component names when using `inject`
+
+---
+
+## 3.5.9
+
+-   Print warning when `inject` and `observer` are used in the wrong order, see #146, by @delaetthomas
+
+## 3.5.8
+
+-   Fixed issue where `props` where not passed properly to components in very rare cases. Also fixed #115
+
+## 3.5.7
+
+-   Bundles are no longer minified, fixes #127
+
+## 3.5.6
+
+-   Export `propTypes` as `PropTypes`, like React (@andykog, ##117)
+
+## 3.5.5
+
+-   Removed `experimental` status of `inject` / `Provider`. Official feature now.
+-   Fixed hot-reloading issue, #101
+
+## 3.5.4
+
+-   Introduced `wrappedInstance` by @rossipedia on `inject` decorated HOC's, see https://github.com/mobxjs/mobx-react/pull/90/
+-   print warnings when assign values to `propTypes`, `defaultProps`, or `contextTypes` of a HOC. (by @jtraub, see https://github.com/mobxjs/mobx-react/pull/88/)
+-   Static properties are now hoisted to HoC components when, #92
+-   If `inject` is used incombination with a function, the object return from the function will now be merged into the `nextProps` instead of replacing them, #80
+-   Always do propType checking untracked, partially fixes #56, #305
+
+## 3.5.3
+
+-   Fixed error `Cannot read property 'renderReporter' of undefined` (#96)
+
+## 3.5.2
+
+-   Added propTypes.observableArrayOf and propTypes.arrayOrObservableArrayOf (#91)
+
+## 3.5.1
+
+-   Fixed regression #85, changes caused by the constructor results in inconsistent rendering (N.B.: that is un-idiomatic React usage and React will warn about this!)
+
+## 3.5.0
+
+-   Introduced `inject("store1", "store2")(component)` as alternative syntax to inject stores. Should address #77, #70
+-   Introduced the `wrappedComponent` property on injected higher order components, addresses #70, #72
+-   Fixed #76: error when no stores are provided through context
+-   Added typings for devTools related features (@benjamingr).
+-   Added MobX specific propTypes (@mattruby)
+-   Merged #44, fixes #73: don't re-render if component was somehow unmounted
+
+## 3.4.0
+
+-   Introduced `Provider` / context support (#53 / MobX #300)
+-   Fixed issues when using devtools with IE. #66 (By @pvasek)
+
+## 3.3.1
+
+-   Added typescript typings form `mobx-react/native` and `mobx-react/custom`
+-   Fixed #63: error when using stateless function components when using babel and typescript
+
+## 3.3.0
+
+-   Upgraded to MobX 2.2.0
+
+## 3.2.0
+
+-   Added support for react-native 0.25 and higher. By @danieldunderfelt.
+
+## 3.1.0
+
+-   Added support for custom renderers (without DOM), use: `mobx-react/custom` as import fixes #42
+-   Fixed some issues with rollup #43
+-   Minor optimization
+
+## 3.0.5
+
+Introduced `componentWillReact`
+
+## 3.0.4
+
+The debug name stateless function components of babel transpiled jsx are now properly picked up if the wrapper is applied after defining the component:
+
+```javascript
+const MyComponent = () => <span>hi</span>
+
+export default observer(MyComponent)
+```
+
+## 3.0.3
+
+Removed peer dependencies, React 15 (and 0.13) are supported as well. By @bkniffler
+
+## 3.0.2
+
+Removed the warning introduced in 3.0.1. It triggered always when using shallow rendering (when using shallow rendering `componentDidMount` won't fire. See https://github.com/facebook/react/issues/4919).
+
+## 3.0.1
+
+Added warning when changing state in `getInitialState` / `constructor`.
+
+## 3.0.0
+
+Upgraded to MobX 2.0.0
+
+## 2.1.5
+
+Improved typescript typings overloads of `observer`
+
+## 2.1.4
+
+Added empty 'dependencies' section to package.json, fixes #26
+
+## 2.1.3
+
+Added support for context to stateless components. (by Kosta-Github).
+
+## 2.1.1
+
+Fixed #12: fixed React warning when a component was unmounted after scheduling a re-render but before executing it.
+
+## 2.1.0
+
+Upped dependency of mobx to 1.1.1.
+
+## 2.0.1
+
+It is now possible to define `propTypes` and `getDefaultProps` on a stateless component:
+
+```javascript
+const myComponent = props => {
+    // render
+}
+
+myComponent.propTypes = {
+    name: React.PropTypes.string
+}
+
+myComponent.defaultProps = {
+    name: "World"
+}
+
+export default observer(myComponent)
+```
+
+All credits to Jiri Spac for this contribution!
+
+## 2.0.0
+
+Use React 0.14 instead of React 0.13. For React 0.13, use version `mobx-react@1.0.2` or higher.
+
+## 1.0.2
+
+Minor fixes and improvements
+
+## 1.0.1
+
+Fixed issue with typescript typings. An example project with MobX, React, Typescript, TSX can be found here: https://github.com/mobxjs/mobx-react-typescript
+
+## 1.0.0
+
+`reactiveComponent` has been renamed to `observer`
+
+### 0.2.3
+
+Added separte import for react-native: use `var reactiveComponent = require('mobx-react/native').reactiveComponent` for native support; webpack clients will refuse to build otherwise.
+
+### 0.2.2
+
+Added react-native as dependency, so that the package works with either `react` or `react-native`.
+
+### 0.2.0
+
+Upgraded to MobX 0.7.0
+
+### 0.1.7
+
+Fixed issue where Babel generated component classes where not properly picked up.
+
+### 0.1.6
+
+`observer` now accepts a pure render function as argument, besides constructor function. For example:
+
+```javascript
+var TodoItem = observer(function TodoItem(props) {
+    var todo = props.todo
+    return <li>{todo.task}</li>
+})
+```
+
+### 0.1.5
+
+observer is now defined in terms of side effects.
+
+### 0.1.4
+
+Added support for React 0.14(RC) by dropping peer dependency
diff --git a/node_modules/mobx-react/LICENSE b/node_modules/mobx-react/LICENSE
new file mode 100644
index 0000000..b58beca
--- /dev/null
+++ b/node_modules/mobx-react/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Michel Weststrate
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/mobx-react/README.md b/node_modules/mobx-react/README.md
new file mode 100644
index 0000000..5247626
--- /dev/null
+++ b/node_modules/mobx-react/README.md
@@ -0,0 +1,505 @@
+# mobx-react
+
+[![CircleCI](https://circleci.com/gh/mobxjs/mobx-react.svg?style=svg)](https://circleci.com/gh/mobxjs/mobx-react)
+[![CDNJS](https://img.shields.io/cdnjs/v/mobx-react.svg)](https://cdnjs.com/libraries/mobx-react)
+[![Minzipped size](https://img.shields.io/bundlephobia/minzip/mobx-react-lite.svg)](https://bundlephobia.com/result?p=mobx-react-lite)
+
+[![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.svg?v=101)](https://github.com/ellerbrock/typescript-badges/)[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
+
+[![Discuss on Github](https://img.shields.io/badge/discuss%20on-GitHub-orange)](https://github.com/mobxjs/mobx/discussions)
+[![View changelog](https://img.shields.io/badge/changelogs.xyz-Explore%20Changelog-brightgreen)](https://changelogs.xyz/mobx-react)
+
+Package with React component wrapper for combining React with MobX.
+Exports the `observer` decorator and other utilities.
+For documentation, see the [MobX](https://mobx.js.org) project.
+This package supports both React and React Native.
+
+## Choosing your version
+
+There are currently two actively maintained versions of mobx-react:
+
+| NPM Version | Support MobX version | Supported React versions | Supports hook based components                                                   |
+| ----------- | -------------------- | ------------------------ | -------------------------------------------------------------------------------- |
+| v7          | 6.\*                 | 16.8+                    | Yes                                                                              |
+| v6          | 4._ / 5._            | 16.8+                    | Yes                                                                              |
+| v5          | 4._ / 5._            | 0.13+                    | No, but it is possible to use `<Observer>` sections inside hook based components |
+
+mobx-react 6 / 7 is a repackage of the smaller [mobx-react-lite](https://github.com/mobxjs/mobx/tree/main/packages/mobx-react-lite) package + following features from the `mobx-react@5` package added:
+
+-   Support for class based components for `observer` and `@observer`
+-   `Provider / inject` to pass stores around (but consider to use `React.createContext` instead)
+-   `PropTypes` to describe observable based property checkers (but consider to use TypeScript instead)
+-   The `disposeOnUnmount` utility / decorator to easily clean up resources such as reactions created in your class based components.
+
+## Installation
+
+`npm install mobx-react --save`
+
+Or CDN: https://unpkg.com/mobx-react (UMD namespace: `mobxReact`)
+
+```javascript
+import { observer } from "mobx-react"
+```
+
+This package provides the bindings for MobX and React.
+See the [official documentation](https://mobx.js.org/react-integration.html) for how to get started.
+
+For greenfield projects you might want to consider to use [mobx-react-lite](https://github.com/mobxjs/mobx/tree/main/packages/mobx-react-lite), if you intend to only use function based components. `React.createContext` can be used to pass stores around.
+
+## API documentation
+
+Please check [mobx.js.org](https://mobx.js.org/) for the general documentation. The documentation below highlights some specifics.
+
+### `observer(component)`
+
+Function (and decorator) that converts a React component definition, React component class, or stand-alone render function, into a reactive component. A converted component will track which observables are used by its effective `render` and automatically re-render the component when one of these values changes.
+
+#### Functional Components
+
+`React.memo` is automatically applied to functional components provided to `observer`. `observer` does not accept a functional component already wrapped in `React.memo`, or an `observer`, in order to avoid consequences that might arise as a result of wrapping it twice.
+
+#### Class Components
+
+When using component classes, `this.props` and `this.state` will be made observables, so the component will react to all changes in props and state that are used by `render`.
+
+`shouldComponentUpdate` is not supported. As such, it is recommended that class components extend `React.PureComponent`. The `observer` will automatically patch non-pure class components with an internal implementation of `React.PureComponent` if necessary.
+
+See the [MobX](https://mobx.js.org/react-integration.html#react-integration) documentation for more details.
+
+```javascript
+import { observer } from "mobx-react"
+
+// ---- ES6 syntax ----
+const TodoView = observer(
+    class TodoView extends React.Component {
+        render() {
+            return <div>{this.props.todo.title}</div>
+        }
+    }
+)
+
+// ---- ESNext syntax with decorator syntax enabled ----
+@observer
+class TodoView extends React.Component {
+    render() {
+        return <div>{this.props.todo.title}</div>
+    }
+}
+
+// ---- or just use function components: ----
+const TodoView = observer(({ todo }) => <div>{todo.title}</div>)
+```
+
+### `Observer`
+
+`Observer` is a React component, which applies `observer` to an anonymous region in your component.
+It takes as children a single, argumentless function which should return exactly one React component.
+The rendering in the function will be tracked and automatically re-rendered when needed.
+This can come in handy when needing to pass render function to external components (for example the React Native listview), or if you
+dislike the `observer` decorator / function.
+
+```javascript
+class App extends React.Component {
+    render() {
+        return (
+            <div>
+                {this.props.person.name}
+                <Observer>{() => <div>{this.props.person.name}</div>}</Observer>
+            </div>
+        )
+    }
+}
+
+const person = observable({ name: "John" })
+
+ReactDOM.render(<App person={person} />, document.body)
+person.name = "Mike" // will cause the Observer region to re-render
+```
+
+In case you are a fan of render props, you can use that instead of children. Be advised, that you cannot use both approaches at once, children have a precedence.
+Example
+
+```javascript
+class App extends React.Component {
+    render() {
+        return (
+            <div>
+                {this.props.person.name}
+                <Observer render={() => <div>{this.props.person.name}</div>} />
+            </div>
+        )
+    }
+}
+
+const person = observable({ name: "John" })
+
+ReactDOM.render(<App person={person} />, document.body)
+person.name = "Mike" // will cause the Observer region to re-render
+```
+
+### `useLocalObservable` hook
+
+[User guide](https://mobx-react.js.org/state-local)
+
+Local observable state can be introduced by using the `useLocalObservable` hook, that runs once to create an observable store. A quick example would be:
+
+```javascript
+import { useLocalObservable, Observer } from "mobx-react-lite"
+
+const Todo = () => {
+    const todo = useLocalObservable(() => ({
+        title: "Test",
+        done: true,
+        toggle() {
+            this.done = !this.done
+        }
+    }))
+
+    return (
+        <Observer>
+            {() => (
+                <h1 onClick={todo.toggle}>
+                    {todo.title} {todo.done ? "[DONE]" : "[TODO]"}
+                </h1>
+            )}
+        </Observer>
+    )
+}
+```
+
+When using `useLocalObservable`, all properties of the returned object will be made observable automatically, getters will be turned into computed properties, and methods will be bound to the store and apply mobx transactions automatically. If new class instances are returned from the initializer, they will be kept as is.
+
+It is important to realize that the store is created only once! It is not possible to specify dependencies to force re-creation, _nor should you directly be referring to props for the initializer function_, as changes in those won't propagate.
+
+Instead, if your store needs to refer to props (or `useState` based local state), the `useLocalObservable` should be combined with the `useAsObservableSource` hook, see below.
+
+Note that in many cases it is possible to extract the initializer function to a function outside the component definition. Which makes it possible to test the store itself in a more straight-forward manner, and avoids creating the initializer closure on each re-render.
+
+_Note: using `useLocalObservable` is mostly beneficial for really complex local state, or to obtain more uniform code base. Note that using a local store might conflict with future React features like concurrent rendering._
+
+### Server Side Rendering with `enableStaticRendering`
+
+When using server side rendering, normal lifecycle hooks of React components are not fired, as the components are rendered only once.
+Since components are never unmounted, `observer` components would in this case leak memory when being rendered server side.
+To avoid leaking memory, call `enableStaticRendering(true)` when using server side rendering.
+
+```javascript
+import { enableStaticRendering } from "mobx-react"
+
+enableStaticRendering(true)
+```
+
+This makes sure the component won't try to react to any future data changes.
+
+### Which components should be marked with `observer`?
+
+The simple rule of thumb is: _all components that render observable data_.
+If you don't want to mark a component as observer, for example to reduce the dependencies of a generic component package, make sure you only pass it plain data.
+
+### Enabling decorators (optional)
+
+Decorators are currently a stage-2 ESNext feature. How to enable them is documented [here](https://mobx.js.org/enabling-decorators.html#enabling-decorators-).
+
+### Should I still use smart and dumb components?
+
+See this [thread](https://www.reddit.com/r/reactjs/comments/4vnxg5/free_eggheadio_course_learn_mobx_react_in_30/d61oh0l).
+TL;DR: the conceptual distinction makes a lot of sense when using MobX as well, but use `observer` on all components.
+
+### `PropTypes`
+
+MobX-react provides the following additional `PropTypes` which can be used to validate against MobX structures:
+
+-   `observableArray`
+-   `observableArrayOf(React.PropTypes.number)`
+-   `observableMap`
+-   `observableObject`
+-   `arrayOrObservableArray`
+-   `arrayOrObservableArrayOf(React.PropTypes.number)`
+-   `objectOrObservableObject`
+
+Use `import { PropTypes } from "mobx-react"` to import them, then use for example `PropTypes.observableArray`
+
+### `Provider` and `inject`
+
+See also [the migration guide to React Hooks](https://mobx-react.js.org/recipes-migration).
+
+_Note: usually there is no need anymore to use `Provider` / `inject` in new code bases; most of its features are now covered by `React.createContext`._
+
+`Provider` is a component that can pass stores (or other stuff) using React's context mechanism to child components.
+This is useful if you have things that you don't want to pass through multiple layers of components explicitly.
+
+`inject` can be used to pick up those stores. It is a higher order component that takes a list of strings and makes those stores available to the wrapped component.
+
+Example (based on the official [context docs](https://facebook.github.io/react/docs/context.html#passing-info-automatically-through-a-tree)):
+
+```javascript
+@inject("color")
+@observer
+class Button extends React.Component {
+    render() {
+        return <button style={{ background: this.props.color }}>{this.props.children}</button>
+    }
+}
+
+class Message extends React.Component {
+    render() {
+        return (
+            <div>
+                {this.props.text} <Button>Delete</Button>
+            </div>
+        )
+    }
+}
+
+class MessageList extends React.Component {
+    render() {
+        const children = this.props.messages.map(message => <Message text={message.text} />)
+        return (
+            <Provider color="red">
+                <div>{children}</div>
+            </Provider>
+        )
+    }
+}
+```
+
+Notes:
+
+-   It is possible to read the stores provided by `Provider` using `React.useContext`, by using the `MobXProviderContext` context that can be imported from `mobx-react`.
+-   If a component asks for a store and receives a store via a property with the same name, the property takes precedence. Use this to your advantage when testing!
+-   When using both `@inject` and `@observer`, make sure to apply them in the correct order: `observer` should be the inner decorator, `inject` the outer. There might be additional decorators in between.
+-   The original component wrapped by `inject` is available as the `wrappedComponent` property of the created higher order component.
+
+#### "The set of provided stores has changed" error
+
+Values provided through `Provider` should be final. Make sure that if you put things in `context` that might change over time, that they are `@observable` or provide some other means to listen to changes, like callbacks. However, if your stores will change over time, like an observable value of another store, MobX will throw an error.
+This restriction exists mainly for legacy reasons. If you have a scenario where you need to modify the set of stores, please leave a comment about it in this issue https://github.com/mobxjs/mobx-react/issues/745. Or a preferred way is to [use React Context](https://mobx-react.js.org/recipes-context) directly which does not have this restriction.
+
+#### Inject as function
+
+The above example in ES5 would start like:
+
+```javascript
+var Button = inject("color")(
+    observer(
+        class Button extends Component {
+            /* ... etc ... */
+        }
+    )
+)
+```
+
+A functional stateless component would look like:
+
+```javascript
+var Button = inject("color")(
+    observer(({ color }) => {
+        /* ... etc ... */
+    })
+)
+```
+
+#### Customizing inject
+
+Instead of passing a list of store names, it is also possible to create a custom mapper function and pass it to inject.
+The mapper function receives all stores as argument, the properties with which the components are invoked and the context, and should produce a new set of properties,
+that are mapped into the original:
+
+`mapperFunction: (allStores, props, context) => additionalProps`
+
+Since version 4.0 the `mapperFunction` itself is tracked as well, so it is possible to do things like:
+
+```javascript
+const NameDisplayer = ({ name }) => <h1>{name}</h1>
+
+const UserNameDisplayer = inject(stores => ({
+    name: stores.userStore.name
+}))(NameDisplayer)
+
+const user = mobx.observable({
+    name: "Noa"
+})
+
+const App = () => (
+    <Provider userStore={user}>
+        <UserNameDisplayer />
+    </Provider>
+)
+
+ReactDOM.render(<App />, document.body)
+```
+
+_N.B. note that in this *specific* case neither `NameDisplayer` nor `UserNameDisplayer` needs to be decorated with `observer`, since the observable dereferencing is done in the mapper function_
+
+#### Using `PropTypes` and `defaultProps` and other static properties in combination with `inject`
+
+Inject wraps a new component around the component you pass into it.
+This means that assigning a static property to the resulting component, will be applied to the HoC, and not to the original component.
+So if you take the following example:
+
+```javascript
+const UserName = inject("userStore")(({ userStore, bold }) => someRendering())
+
+UserName.propTypes = {
+    bold: PropTypes.boolean.isRequired,
+    userStore: PropTypes.object.isRequired // will always fail
+}
+```
+
+The above propTypes are incorrect, `bold` needs to be provided by the caller of the `UserName` component and is checked by React.
+However, `userStore` does not need to be required! Although it is required for the original stateless function component, it is not
+required for the resulting inject component. After all, the whole point of that component is to provide that `userStore` itself.
+
+So if you want to make assertions on the data that is being injected (either stores or data resulting from a mapper function), the propTypes
+should be defined on the _wrapped_ component. Which is available through the static property `wrappedComponent` on the inject component:
+
+```javascript
+const UserName = inject("userStore")(({ userStore, bold }) => someRendering())
+
+UserName.propTypes = {
+    bold: PropTypes.boolean.isRequired // could be defined either here ...
+}
+
+UserName.wrappedComponent.propTypes = {
+    // ... or here
+    userStore: PropTypes.object.isRequired // correct
+}
+```
+
+The same principle applies to `defaultProps` and other static React properties.
+Note that it is not allowed to redefine `contextTypes` on `inject` components (but is possible to define it on `wrappedComponent`)
+
+Finally, mobx-react will automatically move non React related static properties from wrappedComponent to the inject component so that all static fields are
+actually available to the outside world without needing `.wrappedComponent`.
+
+#### Strongly typing inject
+
+##### With TypeScript
+
+`inject` also accepts a function (`(allStores, nextProps, nextContext) => additionalProps`) that can be used to pick all the desired stores from the available stores like this.
+The `additionalProps` will be merged into the original `nextProps` before being provided to the next component.
+
+```typescript
+import { IUserStore } from "myStore"
+
+@inject(allStores => ({
+    userStore: allStores.userStore as IUserStore
+}))
+class MyComponent extends React.Component<{ userStore?: IUserStore; otherProp: number }, {}> {
+    /* etc */
+}
+```
+
+Make sure to mark `userStore` as an optional property. It should not (necessarily) be passed in by parent components at all!
+
+Note: If you have strict null checking enabled, you could muffle the nullable type by using the `!` operator:
+
+```
+public render() {
+   const {a, b} = this.store!
+   // ...
+}
+```
+
+By [migrating to React Hooks](https://mobx-react.js.org/recipes-migration) you can avoid problems with TypeScript.
+
+#### Testing store injection
+
+It is allowed to pass any declared store in directly as a property as well. This makes it easy to set up individual component tests without a provider.
+
+So if you have in your app something like:
+
+```javascript
+<Provider profile={profile}>
+    <Person age={"30"} />
+</Provider>
+```
+
+In your test you can easily test the `Person` component by passing the necessary store as prop directly:
+
+```
+const profile = new Profile()
+const mountedComponent = mount(
+   <Person age={'30'} profile={profile} />
+)
+```
+
+Bear in mind that using shallow rendering won't provide any useful results when testing injected components; only the injector will be rendered.
+To test with shallow rendering, instantiate the `wrappedComponent` instead: `shallow(<Person.wrappedComponent />)`
+
+### disposeOnUnmount(componentInstance, propertyKey | function | function[])
+
+Function (and decorator) that makes sure a function (usually a disposer such as the ones returned by `reaction`, `autorun`, etc.) is automatically executed as part of the componentWillUnmount lifecycle event.
+
+```javascript
+import { disposeOnUnmount } from "mobx-react"
+
+class SomeComponent extends React.Component {
+    // decorator version
+    @disposeOnUnmount
+    someReactionDisposer = reaction(...)
+
+    // decorator version with arrays
+    @disposeOnUnmount
+    someReactionDisposers = [
+        reaction(...),
+        reaction(...)
+    ]
+
+
+    // function version over properties
+    someReactionDisposer = disposeOnUnmount(this, reaction(...))
+
+    // function version inside methods
+    componentDidMount() {
+        // single function
+        disposeOnUnmount(this, reaction(...))
+
+        // or function array
+        disposeOnUnmount(this, [
+            reaction(...),
+            reaction(...)
+        ])
+    }
+}
+```
+
+## DevTools
+
+`mobx-react@6` and higher are no longer compatible with the mobx-react-devtools.
+That is, the MobX react devtools will no longer show render timings or dependency trees of the component.
+The reason is that the standard React devtools are also capable of highlighting re-rendering components.
+And the dependency tree of a component can now be inspected by the standard devtools as well, as shown in the image below:
+
+![hooks.png](hooks.png)
+
+## FAQ
+
+**Should I use `observer` for each component?**
+
+You should use `observer` on every component that displays observable data.
+Even the small ones. `observer` allows components to render independently from their parent and in general this means that
+the more you use `observer`, the better the performance become.
+The overhead of `observer` itself is negligible.
+See also [Do child components need `@observer`?](https://github.com/mobxjs/mobx/issues/101)
+
+**I see React warnings about `forceUpdate` / `setState` from React**
+
+The following warning will appear if you trigger a re-rendering between instantiating and rendering a component:
+
+```
+
+Warning: forceUpdate(...): Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.`
+
+```
+
+-- or --
+
+```
+
+Warning: setState(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.
+
+```
+
+Usually this means that (another) component is trying to modify observables used by this components in their `constructor` or `getInitialState` methods.
+This violates the React Lifecycle, `componentWillMount` should be used instead if state needs to be modified before mounting.
diff --git a/node_modules/mobx-react/batchingForReactDom.js b/node_modules/mobx-react/batchingForReactDom.js
new file mode 100644
index 0000000..3c73786
--- /dev/null
+++ b/node_modules/mobx-react/batchingForReactDom.js
@@ -0,0 +1 @@
+require("mobx-react-lite/batchingForReactDom")
diff --git a/node_modules/mobx-react/batchingForReactNative.js b/node_modules/mobx-react/batchingForReactNative.js
new file mode 100644
index 0000000..f6f3285
--- /dev/null
+++ b/node_modules/mobx-react/batchingForReactNative.js
@@ -0,0 +1 @@
+require("mobx-react-lite/batchingForReactNative")
diff --git a/node_modules/mobx-react/batchingOptOut.js b/node_modules/mobx-react/batchingOptOut.js
new file mode 100644
index 0000000..f9533d9
--- /dev/null
+++ b/node_modules/mobx-react/batchingOptOut.js
@@ -0,0 +1 @@
+require("mobx-react-lite/batchingOptOut")
diff --git a/node_modules/mobx-react/dist/Provider.d.ts b/node_modules/mobx-react/dist/Provider.d.ts
new file mode 100644
index 0000000..c305a5e
--- /dev/null
+++ b/node_modules/mobx-react/dist/Provider.d.ts
@@ -0,0 +1,10 @@
+import React from "react";
+import { IValueMap } from "./types/IValueMap";
+export declare const MobXProviderContext: React.Context<Record<string, any>>;
+export interface ProviderProps extends IValueMap {
+    children: React.ReactNode;
+}
+export declare function Provider(props: ProviderProps): JSX.Element;
+export declare namespace Provider {
+    var displayName: string;
+}
diff --git a/node_modules/mobx-react/dist/disposeOnUnmount.d.ts b/node_modules/mobx-react/dist/disposeOnUnmount.d.ts
new file mode 100644
index 0000000..51c3476
--- /dev/null
+++ b/node_modules/mobx-react/dist/disposeOnUnmount.d.ts
@@ -0,0 +1,5 @@
+import React from "react";
+declare type Disposer = () => void;
+export declare function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void;
+export declare function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(target: React.Component<any, any>, fn: TF): TF;
+export {};
diff --git a/node_modules/mobx-react/dist/index.d.ts b/node_modules/mobx-react/dist/index.d.ts
new file mode 100644
index 0000000..aab7d40
--- /dev/null
+++ b/node_modules/mobx-react/dist/index.d.ts
@@ -0,0 +1,7 @@
+export { Observer, useObserver, useAsObservableSource, useLocalStore, isUsingStaticRendering, useStaticRendering, enableStaticRendering, observerBatching, useLocalObservable } from "mobx-react-lite";
+export { observer } from "./observer";
+export { MobXProviderContext, Provider, ProviderProps } from "./Provider";
+export { inject } from "./inject";
+export { disposeOnUnmount } from "./disposeOnUnmount";
+export { PropTypes } from "./propTypes";
+export { IWrappedComponent } from "./types/IWrappedComponent";
diff --git a/node_modules/mobx-react/dist/index.js b/node_modules/mobx-react/dist/index.js
new file mode 100644
index 0000000..e951059
--- /dev/null
+++ b/node_modules/mobx-react/dist/index.js
@@ -0,0 +1,8 @@
+
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./mobxreact.cjs.production.min.js')
+} else {
+  module.exports = require('./mobxreact.cjs.development.js')
+}
diff --git a/node_modules/mobx-react/dist/inject.d.ts b/node_modules/mobx-react/dist/inject.d.ts
new file mode 100644
index 0000000..6bcef2f
--- /dev/null
+++ b/node_modules/mobx-react/dist/inject.d.ts
@@ -0,0 +1,5 @@
+import { IReactComponent } from "./types/IReactComponent";
+import { IWrappedComponent } from "./types/IWrappedComponent";
+import { IStoresToProps } from "./types/IStoresToProps";
+export declare function inject(...stores: Array<string>): <T extends IReactComponent<any>>(target: T) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never);
+export declare function inject<S, P, I, C>(fn: IStoresToProps<S, P, I, C>): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>;
diff --git a/node_modules/mobx-react/dist/mobxreact.cjs.development.js b/node_modules/mobx-react/dist/mobxreact.cjs.development.js
new file mode 100644
index 0000000..34249c7
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.cjs.development.js
@@ -0,0 +1,847 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var mobx = require('mobx');
+var React = require('react');
+var React__default = _interopDefault(React);
+var mobxReactLite = require('mobx-react-lite');
+
+var symbolId = 0;
+
+function createSymbol(name) {
+  if (typeof Symbol === "function") {
+    return Symbol(name);
+  }
+
+  var symbol = "__$mobx-react " + name + " (" + symbolId + ")";
+  symbolId++;
+  return symbol;
+}
+
+var createdSymbols = {};
+function newSymbol(name) {
+  if (!createdSymbols[name]) {
+    createdSymbols[name] = createSymbol(name);
+  }
+
+  return createdSymbols[name];
+}
+function shallowEqual(objA, objB) {
+  //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (is(objA, objB)) return true;
+
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+
+  var keysA = Object.keys(objA);
+  var keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+
+  for (var i = 0; i < keysA.length; i++) {
+    if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+function is(x, y) {
+  // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+
+var hoistBlackList = {
+  $$typeof: 1,
+  render: 1,
+  compare: 1,
+  type: 1,
+  childContextTypes: 1,
+  contextType: 1,
+  contextTypes: 1,
+  defaultProps: 1,
+  getDefaultProps: 1,
+  getDerivedStateFromError: 1,
+  getDerivedStateFromProps: 1,
+  mixins: 1,
+  displayName: 1,
+  propTypes: 1
+};
+function copyStaticProperties(base, target) {
+  var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));
+  Object.getOwnPropertyNames(base).forEach(function (key) {
+    if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+/**
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+ * @param target
+ * @param prop
+ * @param value
+ */
+
+function setHiddenProp(target, prop, value) {
+  if (!Object.hasOwnProperty.call(target, prop)) {
+    Object.defineProperty(target, prop, {
+      enumerable: false,
+      configurable: true,
+      writable: true,
+      value: value
+    });
+  } else {
+    target[prop] = value;
+  }
+}
+/**
+ * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks
+ * and the handler provided by mobx-react
+ */
+
+var mobxMixins = /*#__PURE__*/newSymbol("patchMixins");
+var mobxPatchedDefinition = /*#__PURE__*/newSymbol("patchedDefinition");
+
+function getMixins(target, methodName) {
+  var mixins = target[mobxMixins] = target[mobxMixins] || {};
+  var methodMixins = mixins[methodName] = mixins[methodName] || {};
+  methodMixins.locks = methodMixins.locks || 0;
+  methodMixins.methods = methodMixins.methods || [];
+  return methodMixins;
+}
+
+function wrapper(realMethod, mixins) {
+  var _this = this;
+
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+
+  // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls
+  mixins.locks++;
+
+  try {
+    var retVal;
+
+    if (realMethod !== undefined && realMethod !== null) {
+      retVal = realMethod.apply(this, args);
+    }
+
+    return retVal;
+  } finally {
+    mixins.locks--;
+
+    if (mixins.locks === 0) {
+      mixins.methods.forEach(function (mx) {
+        mx.apply(_this, args);
+      });
+    }
+  }
+}
+
+function wrapFunction(realMethod, mixins) {
+  var fn = function fn() {
+    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      args[_key2] = arguments[_key2];
+    }
+
+    wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));
+  };
+
+  return fn;
+}
+
+function patch(target, methodName, mixinMethod) {
+  var mixins = getMixins(target, methodName);
+
+  if (mixins.methods.indexOf(mixinMethod) < 0) {
+    mixins.methods.push(mixinMethod);
+  }
+
+  var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);
+
+  if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {
+    // already patched definition, do not repatch
+    return;
+  }
+
+  var originalMethod = target[methodName];
+  var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);
+  Object.defineProperty(target, methodName, newDefinition);
+}
+
+function createDefinition(target, methodName, enumerable, mixins, originalMethod) {
+  var _ref;
+
+  var wrappedFunc = wrapFunction(originalMethod, mixins);
+  return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {
+    return wrappedFunc;
+  }, _ref.set = function set(value) {
+    if (this === target) {
+      wrappedFunc = wrapFunction(value, mixins);
+    } else {
+      // when it is an instance of the prototype/a child prototype patch that particular case again separately
+      // since we need to store separate values depending on wether it is the actual instance, the prototype, etc
+      // e.g. the method for super might not be the same as the method for the prototype which might be not the same
+      // as the method for the instance
+      var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);
+      Object.defineProperty(this, methodName, newDefinition);
+    }
+  }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;
+}
+
+var mobxAdminProperty = mobx.$mobx || "$mobx";
+var mobxObserverProperty = /*#__PURE__*/newSymbol("isMobXReactObserver");
+var mobxIsUnmounted = /*#__PURE__*/newSymbol("isUnmounted");
+var skipRenderKey = /*#__PURE__*/newSymbol("skipRender");
+var isForcingUpdateKey = /*#__PURE__*/newSymbol("isForcingUpdate");
+function makeClassComponentObserver(componentClass) {
+  var target = componentClass.prototype;
+
+  if (componentClass[mobxObserverProperty]) {
+    var displayName = getDisplayName(target);
+    console.warn("The provided component class (" + displayName + ") \n                has already been declared as an observer component.");
+  } else {
+    componentClass[mobxObserverProperty] = true;
+  }
+
+  if (target.componentWillReact) throw new Error("The componentWillReact life-cycle event is no longer supported");
+
+  if (componentClass["__proto__"] !== React.PureComponent) {
+    if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU;else if (target.shouldComponentUpdate !== observerSCU) // n.b. unequal check, instead of existence check, as @observer might be on superclass as well
+      throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.");
+  } // this.props and this.state are made observable, just to make sure @computed fields that
+  // are defined inside the component, and which rely on state or props, re-compute if state or props change
+  // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)
+  // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+
+
+
+  makeObservableProp(target, "props");
+  makeObservableProp(target, "state");
+  var baseRender = target.render;
+
+  if (typeof baseRender !== 'function') {
+    var _displayName = getDisplayName(target);
+
+    throw new Error("[mobx-react] class component (" + _displayName + ") is missing `render` method." + "\n`observer` requires `render` being a function defined on prototype." + "\n`render = () => {}` or `render = function() {}` is not supported.");
+  }
+
+  target.render = function () {
+    return makeComponentReactive.call(this, baseRender);
+  };
+
+  patch(target, "componentWillUnmount", function () {
+    var _this$render$mobxAdmi;
+
+    if (mobxReactLite.isUsingStaticRendering() === true) return;
+    (_this$render$mobxAdmi = this.render[mobxAdminProperty]) == null ? void 0 : _this$render$mobxAdmi.dispose();
+    this[mobxIsUnmounted] = true;
+
+    if (!this.render[mobxAdminProperty]) {
+      // Render may have been hot-swapped and/or overriden by a subclass.
+      var _displayName2 = getDisplayName(this);
+
+      console.warn("The reactive render of an observer class component (" + _displayName2 + ") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.");
+    }
+  });
+  return componentClass;
+} // Generates a friendly name for debugging
+
+function getDisplayName(comp) {
+  return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || "<component>";
+}
+
+function makeComponentReactive(render) {
+  var _this = this;
+
+  if (mobxReactLite.isUsingStaticRendering() === true) return render.call(this);
+  /**
+   * If props are shallowly modified, react will render anyway,
+   * so atom.reportChanged() should not result in yet another re-render
+   */
+
+  setHiddenProp(this, skipRenderKey, false);
+  /**
+   * forceUpdate will re-assign this.props. We don't want that to cause a loop,
+   * so detect these changes
+   */
+
+  setHiddenProp(this, isForcingUpdateKey, false);
+  var initialName = getDisplayName(this);
+  var baseRender = render.bind(this);
+  var isRenderingPending = false;
+  var reaction = new mobx.Reaction(initialName + ".render()", function () {
+    if (!isRenderingPending) {
+      // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)
+      // This unidiomatic React usage but React will correctly warn about this so we continue as usual
+      // See #85 / Pull #44
+      isRenderingPending = true;
+
+      if (_this[mobxIsUnmounted] !== true) {
+        var hasError = true;
+
+        try {
+          setHiddenProp(_this, isForcingUpdateKey, true);
+          if (!_this[skipRenderKey]) React.Component.prototype.forceUpdate.call(_this);
+          hasError = false;
+        } finally {
+          setHiddenProp(_this, isForcingUpdateKey, false);
+          if (hasError) reaction.dispose();
+        }
+      }
+    }
+  });
+  reaction["reactComponent"] = this;
+  reactiveRender[mobxAdminProperty] = reaction;
+  this.render = reactiveRender;
+
+  function reactiveRender() {
+    isRenderingPending = false;
+    var exception = undefined;
+    var rendering = undefined;
+    reaction.track(function () {
+      try {
+        rendering = mobx._allowStateChanges(false, baseRender);
+      } catch (e) {
+        exception = e;
+      }
+    });
+
+    if (exception) {
+      throw exception;
+    }
+
+    return rendering;
+  }
+
+  return reactiveRender.call(this);
+}
+
+function observerSCU(nextProps, nextState) {
+  if (mobxReactLite.isUsingStaticRendering()) {
+    console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.");
+  } // update on any state changes (as is the default)
+
+
+  if (this.state !== nextState) {
+    return true;
+  } // update if props are shallowly not equal, inspired by PureRenderMixin
+  // we could return just 'false' here, and avoid the `skipRender` checks etc
+  // however, it is nicer if lifecycle events are triggered like usually,
+  // so we return true here if props are shallowly modified.
+
+
+  return !shallowEqual(this.props, nextProps);
+}
+
+function makeObservableProp(target, propName) {
+  var valueHolderKey = newSymbol("reactProp_" + propName + "_valueHolder");
+  var atomHolderKey = newSymbol("reactProp_" + propName + "_atomHolder");
+
+  function getAtom() {
+    if (!this[atomHolderKey]) {
+      setHiddenProp(this, atomHolderKey, mobx.createAtom("reactive " + propName));
+    }
+
+    return this[atomHolderKey];
+  }
+
+  Object.defineProperty(target, propName, {
+    configurable: true,
+    enumerable: true,
+    get: function get() {
+      var prevReadState = false;
+
+      if (mobx._allowStateReadsStart && mobx._allowStateReadsEnd) {
+        prevReadState = mobx._allowStateReadsStart(true);
+      }
+
+      getAtom.call(this).reportObserved();
+
+      if (mobx._allowStateReadsStart && mobx._allowStateReadsEnd) {
+        mobx._allowStateReadsEnd(prevReadState);
+      }
+
+      return this[valueHolderKey];
+    },
+    set: function set(v) {
+      if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {
+        setHiddenProp(this, valueHolderKey, v);
+        setHiddenProp(this, skipRenderKey, true);
+        getAtom.call(this).reportChanged();
+        setHiddenProp(this, skipRenderKey, false);
+      } else {
+        setHiddenProp(this, valueHolderKey, v);
+      }
+    }
+  });
+}
+
+var hasSymbol = typeof Symbol === "function" && Symbol["for"]; // Using react-is had some issues (and operates on elements, not on types), see #608 / #609
+
+var ReactForwardRefSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.forward_ref") : typeof React.forwardRef === "function" && /*#__PURE__*/React.forwardRef(function (props) {
+  return null;
+})["$$typeof"];
+var ReactMemoSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.memo") : typeof React.memo === "function" && /*#__PURE__*/React.memo(function (props) {
+  return null;
+})["$$typeof"];
+/**
+ * Observer function / decorator
+ */
+
+function observer(component) {
+  if (component["isMobxInjector"] === true) {
+    console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'");
+  }
+
+  if (ReactMemoSymbol && component["$$typeof"] === ReactMemoSymbol) {
+    throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");
+  } // Unwrap forward refs into `<Observer>` component
+  // we need to unwrap the render, because it is the inner render that needs to be tracked,
+  // not the ForwardRef HoC
+
+
+  if (ReactForwardRefSymbol && component["$$typeof"] === ReactForwardRefSymbol) {
+    var baseRender = component["render"];
+    if (typeof baseRender !== "function") throw new Error("render property of ForwardRef was not a function");
+    return React.forwardRef(function ObserverForwardRef() {
+      var args = arguments;
+      return React.createElement(mobxReactLite.Observer, null, function () {
+        return baseRender.apply(undefined, args);
+      });
+    });
+  } // Function component
+
+
+  if (typeof component === "function" && (!component.prototype || !component.prototype.render) && !component["isReactClass"] && !Object.prototype.isPrototypeOf.call(React.Component, component)) {
+    return mobxReactLite.observer(component);
+  }
+
+  return makeClassComponentObserver(component);
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _objectWithoutPropertiesLoose(source, excluded) {
+  if (source == null) return {};
+  var target = {};
+  var sourceKeys = Object.keys(source);
+  var key, i;
+
+  for (i = 0; i < sourceKeys.length; i++) {
+    key = sourceKeys[i];
+    if (excluded.indexOf(key) >= 0) continue;
+    target[key] = source[key];
+  }
+
+  return target;
+}
+
+var MobXProviderContext = /*#__PURE__*/React__default.createContext({});
+function Provider(props) {
+  var children = props.children,
+      stores = _objectWithoutPropertiesLoose(props, ["children"]);
+
+  var parentValue = React__default.useContext(MobXProviderContext);
+  var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));
+  var value = mutableProviderRef.current;
+
+  {
+    var newValue = _extends({}, value, stores); // spread in previous state for the context based stores
+
+
+    if (!shallowEqual(value, newValue)) {
+      throw new Error("MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.");
+    }
+  }
+
+  return React__default.createElement(MobXProviderContext.Provider, {
+    value: value
+  }, children);
+}
+Provider.displayName = "MobXProvider";
+
+/**
+ * Store Injection
+ */
+
+function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {
+  // Support forward refs
+  var Injector = React__default.forwardRef(function (props, ref) {
+    var newProps = _extends({}, props);
+
+    var context = React__default.useContext(MobXProviderContext);
+    Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});
+
+    if (ref) {
+      newProps.ref = ref;
+    }
+
+    return React__default.createElement(component, newProps);
+  });
+  if (makeReactive) Injector = observer(Injector);
+  Injector["isMobxInjector"] = true; // assigned late to suppress observer warning
+  // Static fields from component should be visible on the generated Injector
+
+  copyStaticProperties(component, Injector);
+  Injector["wrappedComponent"] = component;
+  Injector.displayName = getInjectName(component, injectNames);
+  return Injector;
+}
+
+function getInjectName(component, injectNames) {
+  var displayName;
+  var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component";
+  if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")";
+  return displayName;
+}
+
+function grabStoresByName(storeNames) {
+  return function (baseStores, nextProps) {
+    storeNames.forEach(function (storeName) {
+      if (storeName in nextProps // prefer props over stores
+      ) return;
+      if (!(storeName in baseStores)) throw new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider");
+      nextProps[storeName] = baseStores[storeName];
+    });
+    return nextProps;
+  };
+}
+/**
+ * higher order component that injects stores to a child.
+ * takes either a varargs list of strings, which are stores read from the context,
+ * or a function that manually maps the available stores from the context to props:
+ * storesToProps(mobxStores, props, context) => newProps
+ */
+
+
+function inject() {
+  for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {
+    storeNames[_key] = arguments[_key];
+  }
+
+  if (typeof arguments[0] === "function") {
+    var grabStoresFn = arguments[0];
+    return function (componentClass) {
+      return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);
+    };
+  } else {
+    return function (componentClass) {
+      return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false);
+    };
+  }
+}
+
+var protoStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountProto");
+var instStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountInst");
+
+function runDisposersOnWillUnmount() {
+  var _this = this;
+  [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {
+    var prop = typeof propKeyOrFunction === "string" ? _this[propKeyOrFunction] : propKeyOrFunction;
+
+    if (prop !== undefined && prop !== null) {
+      if (Array.isArray(prop)) prop.map(function (f) {
+        return f();
+      });else prop();
+    }
+  });
+}
+
+function disposeOnUnmount(target, propertyKeyOrFunction) {
+  if (Array.isArray(propertyKeyOrFunction)) {
+    return propertyKeyOrFunction.map(function (fn) {
+      return disposeOnUnmount(target, fn);
+    });
+  }
+
+  var c = Object.getPrototypeOf(target).constructor;
+  var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader
+
+  var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));
+
+  if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {
+    throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");
+  }
+
+  if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function" && !Array.isArray(propertyKeyOrFunction)) {
+    throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");
+  } // decorator's target is the prototype, so it doesn't have any instance properties like props
+
+
+  var isDecorator = typeof propertyKeyOrFunction === "string"; // add property key / function we want run (disposed) to the store
+
+  var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];
+  var store = isDecorator ? // decorators are added to the prototype store
+  target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store
+  target[instStoreKey] || (target[instStoreKey] = []);
+  store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already
+
+  if (!componentWasAlreadyModified) {
+    patch(target, "componentWillUnmount", runDisposersOnWillUnmount);
+  } // return the disposer as is if invoked as a non decorator
+
+
+  if (typeof propertyKeyOrFunction !== "string") {
+    return propertyKeyOrFunction;
+  }
+}
+
+function createChainableTypeChecker(validator) {
+  function checkType(isRequired, props, propName, componentName, location, propFullName) {
+    for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {
+      rest[_key - 6] = arguments[_key];
+    }
+
+    return mobx.untracked(function () {
+      componentName = componentName || "<<anonymous>>";
+      propFullName = propFullName || propName;
+
+      if (props[propName] == null) {
+        if (isRequired) {
+          var actual = props[propName] === null ? "null" : "undefined";
+          return new Error("The " + location + " `" + propFullName + "` is marked as required " + "in `" + componentName + "`, but its value is `" + actual + "`.");
+        }
+
+        return null;
+      } else {
+        // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise
+        return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));
+      }
+    });
+  }
+
+  var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable
+
+  chainedCheckType.isRequired = checkType.bind(null, true);
+  return chainedCheckType;
+} // Copied from React.PropTypes
+
+
+function isSymbol(propType, propValue) {
+  // Native Symbol.
+  if (propType === "symbol") {
+    return true;
+  } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+
+
+  if (propValue["@@toStringTag"] === "Symbol") {
+    return true;
+  } // Fallback for non-spec compliant Symbols which are polyfilled.
+
+
+  if (typeof Symbol === "function" && propValue instanceof Symbol) {
+    return true;
+  }
+
+  return false;
+} // Copied from React.PropTypes
+
+
+function getPropType(propValue) {
+  var propType = typeof propValue;
+
+  if (Array.isArray(propValue)) {
+    return "array";
+  }
+
+  if (propValue instanceof RegExp) {
+    // Old webkits (at least until Android 4.0) return 'function' rather than
+    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+    // passes PropTypes.object.
+    return "object";
+  }
+
+  if (isSymbol(propType, propValue)) {
+    return "symbol";
+  }
+
+  return propType;
+} // This handles more types than `getPropType`. Only used for error messages.
+// Copied from React.PropTypes
+
+
+function getPreciseType(propValue) {
+  var propType = getPropType(propValue);
+
+  if (propType === "object") {
+    if (propValue instanceof Date) {
+      return "date";
+    } else if (propValue instanceof RegExp) {
+      return "regexp";
+    }
+  }
+
+  return propType;
+}
+
+function createObservableTypeCheckerCreator(allowNativeType, mobxType) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    return mobx.untracked(function () {
+      if (allowNativeType) {
+        if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;
+      }
+
+      var mobxChecker;
+
+      switch (mobxType) {
+        case "Array":
+          mobxChecker = mobx.isObservableArray;
+          break;
+
+        case "Object":
+          mobxChecker = mobx.isObservableObject;
+          break;
+
+        case "Map":
+          mobxChecker = mobx.isObservableMap;
+          break;
+
+        default:
+          throw new Error("Unexpected mobxType: " + mobxType);
+      }
+
+      var propValue = props[propName];
+
+      if (!mobxChecker(propValue)) {
+        var preciseType = getPreciseType(propValue);
+        var nativeTypeExpectationMessage = allowNativeType ? " or javascript `" + mobxType.toLowerCase() + "`" : "";
+        return new Error("Invalid prop `" + propFullName + "` of type `" + preciseType + "` supplied to" + " `" + componentName + "`, expected `mobx.Observable" + mobxType + "`" + nativeTypeExpectationMessage + ".");
+      }
+
+      return null;
+    });
+  });
+}
+
+function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {
+      rest[_key2 - 5] = arguments[_key2];
+    }
+
+    return mobx.untracked(function () {
+      if (typeof typeChecker !== "function") {
+        return new Error("Property `" + propFullName + "` of component `" + componentName + "` has " + "invalid PropType notation.");
+      } else {
+        var error = createObservableTypeCheckerCreator(allowNativeType, "Array")(props, propName, componentName, location, propFullName);
+        if (error instanceof Error) return error;
+        var propValue = props[propName];
+
+        for (var i = 0; i < propValue.length; i++) {
+          error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + "[" + i + "]"].concat(rest));
+          if (error instanceof Error) return error;
+        }
+
+        return null;
+      }
+    });
+  });
+}
+
+var observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Array");
+var observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);
+var observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Map");
+var observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Object");
+var arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Array");
+var arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);
+var objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Object");
+var PropTypes = {
+  observableArray: observableArray,
+  observableArrayOf: observableArrayOf,
+  observableMap: observableMap,
+  observableObject: observableObject,
+  arrayOrObservableArray: arrayOrObservableArray,
+  arrayOrObservableArrayOf: arrayOrObservableArrayOf,
+  objectOrObservableObject: objectOrObservableObject
+};
+
+if (!React.Component) throw new Error("mobx-react requires React to be available");
+if (!mobx.observable) throw new Error("mobx-react requires mobx to be available");
+
+Object.defineProperty(exports, 'Observer', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.Observer;
+    }
+});
+Object.defineProperty(exports, 'enableStaticRendering', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.enableStaticRendering;
+    }
+});
+Object.defineProperty(exports, 'isUsingStaticRendering', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.isUsingStaticRendering;
+    }
+});
+Object.defineProperty(exports, 'observerBatching', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.observerBatching;
+    }
+});
+Object.defineProperty(exports, 'useAsObservableSource', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.useAsObservableSource;
+    }
+});
+Object.defineProperty(exports, 'useLocalObservable', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.useLocalObservable;
+    }
+});
+Object.defineProperty(exports, 'useLocalStore', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.useLocalStore;
+    }
+});
+Object.defineProperty(exports, 'useObserver', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.useObserver;
+    }
+});
+Object.defineProperty(exports, 'useStaticRendering', {
+    enumerable: true,
+    get: function () {
+        return mobxReactLite.useStaticRendering;
+    }
+});
+exports.MobXProviderContext = MobXProviderContext;
+exports.PropTypes = PropTypes;
+exports.Provider = Provider;
+exports.disposeOnUnmount = disposeOnUnmount;
+exports.inject = inject;
+exports.observer = observer;
+//# sourceMappingURL=mobxreact.cjs.development.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.cjs.development.js.map b/node_modules/mobx-react/dist/mobxreact.cjs.development.js.map
new file mode 100644
index 0000000..1868b2a
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.cjs.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.cjs.development.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createSymbol","name","Symbol","symbol","createdSymbols","newSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","copyStaticProperties","base","target","protoProps","getOwnPropertyNames","getPrototypeOf","forEach","key","indexOf","defineProperty","getOwnPropertyDescriptor","setHiddenProp","prop","value","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","getMixins","methodName","methodMixins","locks","methods","wrapper","realMethod","args","retVal","undefined","apply","mx","wrapFunction","fn","patch","mixinMethod","push","oldDefinition","originalMethod","newDefinition","createDefinition","wrappedFunc","get","set","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","ObserverForwardRef","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","newValue","createStoreInjector","grabStoresFn","injectNames","makeReactive","Injector","forwardRef","ref","newProps","context","assign","createElement","getInjectName","componentName","grabStoresByName","storeNames","baseStores","storeName","inject","join","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","disposeOnUnmount","propertyKeyOrFunction","c","c2","c3","isDecorator","componentWasAlreadyModified","store","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","actual","chainedCheckType","isSymbol","propType","propValue","getPropType","RegExp","getPreciseType","Date","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","PropTypes","observable"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js b/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js
new file mode 100644
index 0000000..54164fc
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js
@@ -0,0 +1,2 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,r=require("mobx"),t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,o=require("mobx-react-lite"),a=0,i={};function s(e){return i[e]||(i[e]=function(e){if("function"==typeof Symbol)return Symbol(e);var r="__$mobx-react "+e+" ("+a+")";return a++,r}(e)),i[e]}function c(e,r){if(u(e,r))return!0;if("object"!=typeof e||null===e||"object"!=typeof r||null===r)return!1;var t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(var o=0;o<t.length;o++)if(!Object.hasOwnProperty.call(r,t[o])||!u(e[t[o]],r[t[o]]))return!1;return!0}function u(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}var f={$$typeof:1,render:1,compare:1,type:1,childContextTypes:1,contextType:1,contextTypes:1,defaultProps:1,getDefaultProps:1,getDerivedStateFromError:1,getDerivedStateFromProps:1,mixins:1,displayName:1,propTypes:1};function l(e,r,t){Object.hasOwnProperty.call(e,r)?e[r]=t:Object.defineProperty(e,r,{enumerable:!1,configurable:!0,writable:!0,value:t})}var p=s("patchMixins"),b=s("patchedDefinition");function d(e,r){for(var t=this,n=arguments.length,o=new Array(n>2?n-2:0),a=2;a<n;a++)o[a-2]=arguments[a];r.locks++;try{var i;return null!=e&&(i=e.apply(this,o)),i}finally{r.locks--,0===r.locks&&r.methods.forEach((function(e){e.apply(t,o)}))}}function y(e,r){return function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];d.call.apply(d,[this,e,r].concat(n))}}function m(e,r,t){var n=function(e,r){var t=e[p]=e[p]||{},n=t[r]=t[r]||{};return n.locks=n.locks||0,n.methods=n.methods||[],n}(e,r);n.methods.indexOf(t)<0&&n.methods.push(t);var o=Object.getOwnPropertyDescriptor(e,r);if(!o||!o[b]){var a=function e(r,t,n,o,a){var i,s=y(a,o);return(i={})[b]=!0,i.get=function(){return s},i.set=function(a){if(this===r)s=y(a,o);else{var i=e(this,t,n,o,a);Object.defineProperty(this,t,i)}},i.configurable=!0,i.enumerable=n,i}(e,r,o?o.enumerable:void 0,n,e[r]);Object.defineProperty(e,r,a)}}var v=r.$mobx||"$mobx",h=s("isMobXReactObserver"),O=s("isUnmounted"),g=s("skipRender"),w=s("isForcingUpdate");function j(e){var r=e.prototype;if(e[h]){var n=x(r);console.warn("The provided component class ("+n+") \n                has already been declared as an observer component.")}else e[h]=!0;if(r.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==t.PureComponent)if(r.shouldComponentUpdate){if(r.shouldComponentUpdate!==R)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else r.shouldComponentUpdate=R;S(r,"props"),S(r,"state");var a=r.render;if("function"!=typeof a){var i=x(r);throw new Error("[mobx-react] class component ("+i+") is missing `render` method.\n`observer` requires `render` being a function defined on prototype.\n`render = () => {}` or `render = function() {}` is not supported.")}return r.render=function(){return P.call(this,a)},m(r,"componentWillUnmount",(function(){var e;if(!0!==o.isUsingStaticRendering()&&(null==(e=this.render[v])||e.dispose(),this[O]=!0,!this.render[v])){var r=x(this);console.warn("The reactive render of an observer class component ("+r+") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.")}})),e}function x(e){return e.displayName||e.name||e.constructor&&(e.constructor.displayName||e.constructor.name)||"<component>"}function P(e){var n=this;if(!0===o.isUsingStaticRendering())return e.call(this);l(this,g,!1),l(this,w,!1);var a=x(this),i=e.bind(this),s=!1,c=new r.Reaction(a+".render()",(function(){if(!s&&(s=!0,!0!==n[O])){var e=!0;try{l(n,w,!0),n[g]||t.Component.prototype.forceUpdate.call(n),e=!1}finally{l(n,w,!1),e&&c.dispose()}}}));function u(){s=!1;var e=void 0,t=void 0;if(c.track((function(){try{t=r._allowStateChanges(!1,i)}catch(r){e=r}})),e)throw e;return t}return c.reactComponent=this,u[v]=c,this.render=u,u.call(this)}function R(e,r){return o.isUsingStaticRendering()&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==r||!c(this.props,e)}function S(e,t){var n=s("reactProp_"+t+"_valueHolder"),o=s("reactProp_"+t+"_atomHolder");function a(){return this[o]||l(this,o,r.createAtom("reactive "+t)),this[o]}Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){var e=!1;return r._allowStateReadsStart&&r._allowStateReadsEnd&&(e=r._allowStateReadsStart(!0)),a.call(this).reportObserved(),r._allowStateReadsStart&&r._allowStateReadsEnd&&r._allowStateReadsEnd(e),this[n]},set:function(e){this[w]||c(this[n],e)?l(this,n,e):(l(this,n,e),l(this,g,!0),a.call(this).reportChanged(),l(this,g,!1))}})}var C="function"==typeof Symbol&&Symbol.for,E=C?Symbol.for("react.forward_ref"):"function"==typeof t.forwardRef&&t.forwardRef((function(e){return null})).$$typeof,A=C?Symbol.for("react.memo"):"function"==typeof t.memo&&t.memo((function(e){return null})).$$typeof;function k(e){if(!0===e.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),A&&e.$$typeof===A)throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(E&&e.$$typeof===E){var r=e.render;if("function"!=typeof r)throw new Error("render property of ForwardRef was not a function");return t.forwardRef((function(){var e=arguments;return t.createElement(o.Observer,null,(function(){return r.apply(void 0,e)}))}))}return"function"!=typeof e||e.prototype&&e.prototype.render||e.isReactClass||Object.prototype.isPrototypeOf.call(t.Component,e)?j(e):o.observer(e)}function U(){return(U=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var _=n.createContext({});function M(e){var r=e.children,t=function(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r.indexOf(t=a[n])>=0||(o[t]=e[t]);return o}(e,["children"]),o=n.useContext(_),a=n.useRef(U({},o,t));return n.createElement(_.Provider,{value:a.current},r)}function T(e,r,t,o){var a,i,s,c=n.forwardRef((function(t,o){var a=U({},t),i=n.useContext(_);return Object.assign(a,e(i||{},a)||{}),o&&(a.ref=o),n.createElement(r,a)}));return o&&(c=k(c)),c.isMobxInjector=!0,a=r,i=c,s=Object.getOwnPropertyNames(Object.getPrototypeOf(a)),Object.getOwnPropertyNames(a).forEach((function(e){f[e]||-1!==s.indexOf(e)||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(a,e))})),c.wrappedComponent=r,c.displayName=function(e,r){var t=e.displayName||e.name||e.constructor&&e.constructor.name||"Component";return r?"inject-with-"+r+"("+t+")":"inject("+t+")"}(r,t),c}function $(e){return function(r,t){return e.forEach((function(e){if(!(e in t)){if(!(e in r))throw new Error("MobX injector: Store '"+e+"' is not available! Make sure it is provided by some Provider");t[e]=r[e]}})),t}}M.displayName="MobXProvider";var q=s("disposeOnUnmountProto"),N=s("disposeOnUnmountInst");function D(){var e=this;[].concat(this[q]||[],this[N]||[]).forEach((function(r){var t="string"==typeof r?e[r]:r;null!=t&&(Array.isArray(t)?t.map((function(e){return e()})):t())}))}function I(e){function t(t,n,o,a,i,s){for(var c=arguments.length,u=new Array(c>6?c-6:0),f=6;f<c;f++)u[f-6]=arguments[f];return r.untracked((function(){return a=a||"<<anonymous>>",s=s||o,null==n[o]?t?new Error("The "+i+" `"+s+"` is marked as required in `"+a+"`, but its value is `"+(null===n[o]?"null":"undefined")+"`."):null:e.apply(void 0,[n,o,a,i,s].concat(u))}))}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function L(e){var r=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":function(e,r){return"symbol"===e||"Symbol"===r["@@toStringTag"]||"function"==typeof Symbol&&r instanceof Symbol}(r,e)?"symbol":r}function X(e,t){return I((function(n,o,a,i,s){return r.untracked((function(){if(e&&L(n[o])===t.toLowerCase())return null;var i;switch(t){case"Array":i=r.isObservableArray;break;case"Object":i=r.isObservableObject;break;case"Map":i=r.isObservableMap;break;default:throw new Error("Unexpected mobxType: "+t)}var c=n[o];if(!i(c)){var u=function(e){var r=L(e);if("object"===r){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return r}(c),f=e?" or javascript `"+t.toLowerCase()+"`":"";return new Error("Invalid prop `"+s+"` of type `"+u+"` supplied to `"+a+"`, expected `mobx.Observable"+t+"`"+f+".")}return null}))}))}function F(e,t){return I((function(n,o,a,i,s){for(var c=arguments.length,u=new Array(c>5?c-5:0),f=5;f<c;f++)u[f-5]=arguments[f];return r.untracked((function(){if("function"!=typeof t)return new Error("Property `"+s+"` of component `"+a+"` has invalid PropType notation.");var r=X(e,"Array")(n,o,a,i,s);if(r instanceof Error)return r;for(var c=n[o],f=0;f<c.length;f++)if((r=t.apply(void 0,[c,f,a,i,s+"["+f+"]"].concat(u)))instanceof Error)return r;return null}))}))}var W={observableArray:X(!1,"Array"),observableArrayOf:F.bind(null,!1),observableMap:X(!1,"Map"),observableObject:X(!1,"Object"),arrayOrObservableArray:X(!0,"Array"),arrayOrObservableArrayOf:F.bind(null,!0),objectOrObservableObject:X(!0,"Object")};if(!t.Component)throw new Error("mobx-react requires React to be available");if(!r.observable)throw new Error("mobx-react requires mobx to be available");Object.defineProperty(exports,"Observer",{enumerable:!0,get:function(){return o.Observer}}),Object.defineProperty(exports,"enableStaticRendering",{enumerable:!0,get:function(){return o.enableStaticRendering}}),Object.defineProperty(exports,"isUsingStaticRendering",{enumerable:!0,get:function(){return o.isUsingStaticRendering}}),Object.defineProperty(exports,"observerBatching",{enumerable:!0,get:function(){return o.observerBatching}}),Object.defineProperty(exports,"useAsObservableSource",{enumerable:!0,get:function(){return o.useAsObservableSource}}),Object.defineProperty(exports,"useLocalObservable",{enumerable:!0,get:function(){return o.useLocalObservable}}),Object.defineProperty(exports,"useLocalStore",{enumerable:!0,get:function(){return o.useLocalStore}}),Object.defineProperty(exports,"useObserver",{enumerable:!0,get:function(){return o.useObserver}}),Object.defineProperty(exports,"useStaticRendering",{enumerable:!0,get:function(){return o.useStaticRendering}}),exports.MobXProviderContext=_,exports.PropTypes=W,exports.Provider=M,exports.disposeOnUnmount=function e(r,t){if(Array.isArray(t))return t.map((function(t){return e(r,t)}));var o=Object.getPrototypeOf(r).constructor,a=Object.getPrototypeOf(r.constructor),i=Object.getPrototypeOf(Object.getPrototypeOf(r));if(o!==n.Component&&o!==n.PureComponent&&a!==n.Component&&a!==n.PureComponent&&i!==n.Component&&i!==n.PureComponent)throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");if("string"!=typeof t&&"function"!=typeof t&&!Array.isArray(t))throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");var s=!!r[q]||!!r[N];return("string"==typeof t?r[q]||(r[q]=[]):r[N]||(r[N]=[])).push(t),s||m(r,"componentWillUnmount",D),"string"!=typeof t?t:void 0},exports.inject=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];if("function"==typeof arguments[0]){var n=arguments[0];return function(e){return T(n,e,n.name,!0)}}return function(e){return T($(r),e,r.join("-"),!1)}},exports.observer=k;
+//# sourceMappingURL=mobxreact.cjs.production.min.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js.map b/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js.map
new file mode 100644
index 0000000..131ea26
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.cjs.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.cjs.production.min.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createdSymbols","newSymbol","name","Symbol","symbol","createSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","setHiddenProp","target","prop","value","defineProperty","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","wrapper","realMethod","args","locks","retVal","apply","this","methods","forEach","mx","_this","wrapFunction","patch","methodName","mixinMethod","methodMixins","getMixins","indexOf","push","oldDefinition","getOwnPropertyDescriptor","newDefinition","createDefinition","originalMethod","wrappedFunc","get","set","undefined","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","createStoreInjector","grabStoresFn","injectNames","makeReactive","base","protoProps","Injector","forwardRef","ref","newProps","context","assign","createElement","getOwnPropertyNames","getPrototypeOf","key","componentName","getInjectName","grabStoresByName","storeNames","baseStores","storeName","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","chainedCheckType","getPropType","propValue","propType","RegExp","isSymbol","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","Date","getPreciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","PropTypes","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","observable","disposeOnUnmount","propertyKeyOrFunction","fn","c","c2","c3","componentWasAlreadyModified","join"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.development.js b/node_modules/mobx-react/dist/mobxreact.esm.development.js
new file mode 100644
index 0000000..f53515f
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.development.js
@@ -0,0 +1,782 @@
+import { Reaction, _allowStateChanges, _allowStateReadsStart, _allowStateReadsEnd, $mobx, createAtom, untracked, isObservableMap, isObservableObject, isObservableArray, observable } from 'mobx';
+import React__default, { PureComponent, Component, forwardRef, memo, createElement } from 'react';
+import { isUsingStaticRendering, Observer, observer as observer$1 } from 'mobx-react-lite';
+export { Observer, enableStaticRendering, isUsingStaticRendering, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver, useStaticRendering } from 'mobx-react-lite';
+
+var symbolId = 0;
+
+function createSymbol(name) {
+  if (typeof Symbol === "function") {
+    return Symbol(name);
+  }
+
+  var symbol = "__$mobx-react " + name + " (" + symbolId + ")";
+  symbolId++;
+  return symbol;
+}
+
+var createdSymbols = {};
+function newSymbol(name) {
+  if (!createdSymbols[name]) {
+    createdSymbols[name] = createSymbol(name);
+  }
+
+  return createdSymbols[name];
+}
+function shallowEqual(objA, objB) {
+  //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (is(objA, objB)) return true;
+
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+
+  var keysA = Object.keys(objA);
+  var keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+
+  for (var i = 0; i < keysA.length; i++) {
+    if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+function is(x, y) {
+  // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+
+var hoistBlackList = {
+  $$typeof: 1,
+  render: 1,
+  compare: 1,
+  type: 1,
+  childContextTypes: 1,
+  contextType: 1,
+  contextTypes: 1,
+  defaultProps: 1,
+  getDefaultProps: 1,
+  getDerivedStateFromError: 1,
+  getDerivedStateFromProps: 1,
+  mixins: 1,
+  displayName: 1,
+  propTypes: 1
+};
+function copyStaticProperties(base, target) {
+  var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));
+  Object.getOwnPropertyNames(base).forEach(function (key) {
+    if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+/**
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+ * @param target
+ * @param prop
+ * @param value
+ */
+
+function setHiddenProp(target, prop, value) {
+  if (!Object.hasOwnProperty.call(target, prop)) {
+    Object.defineProperty(target, prop, {
+      enumerable: false,
+      configurable: true,
+      writable: true,
+      value: value
+    });
+  } else {
+    target[prop] = value;
+  }
+}
+/**
+ * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks
+ * and the handler provided by mobx-react
+ */
+
+var mobxMixins = /*#__PURE__*/newSymbol("patchMixins");
+var mobxPatchedDefinition = /*#__PURE__*/newSymbol("patchedDefinition");
+
+function getMixins(target, methodName) {
+  var mixins = target[mobxMixins] = target[mobxMixins] || {};
+  var methodMixins = mixins[methodName] = mixins[methodName] || {};
+  methodMixins.locks = methodMixins.locks || 0;
+  methodMixins.methods = methodMixins.methods || [];
+  return methodMixins;
+}
+
+function wrapper(realMethod, mixins) {
+  var _this = this;
+
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+
+  // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls
+  mixins.locks++;
+
+  try {
+    var retVal;
+
+    if (realMethod !== undefined && realMethod !== null) {
+      retVal = realMethod.apply(this, args);
+    }
+
+    return retVal;
+  } finally {
+    mixins.locks--;
+
+    if (mixins.locks === 0) {
+      mixins.methods.forEach(function (mx) {
+        mx.apply(_this, args);
+      });
+    }
+  }
+}
+
+function wrapFunction(realMethod, mixins) {
+  var fn = function fn() {
+    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      args[_key2] = arguments[_key2];
+    }
+
+    wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));
+  };
+
+  return fn;
+}
+
+function patch(target, methodName, mixinMethod) {
+  var mixins = getMixins(target, methodName);
+
+  if (mixins.methods.indexOf(mixinMethod) < 0) {
+    mixins.methods.push(mixinMethod);
+  }
+
+  var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);
+
+  if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {
+    // already patched definition, do not repatch
+    return;
+  }
+
+  var originalMethod = target[methodName];
+  var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);
+  Object.defineProperty(target, methodName, newDefinition);
+}
+
+function createDefinition(target, methodName, enumerable, mixins, originalMethod) {
+  var _ref;
+
+  var wrappedFunc = wrapFunction(originalMethod, mixins);
+  return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {
+    return wrappedFunc;
+  }, _ref.set = function set(value) {
+    if (this === target) {
+      wrappedFunc = wrapFunction(value, mixins);
+    } else {
+      // when it is an instance of the prototype/a child prototype patch that particular case again separately
+      // since we need to store separate values depending on wether it is the actual instance, the prototype, etc
+      // e.g. the method for super might not be the same as the method for the prototype which might be not the same
+      // as the method for the instance
+      var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);
+      Object.defineProperty(this, methodName, newDefinition);
+    }
+  }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;
+}
+
+var mobxAdminProperty = $mobx || "$mobx";
+var mobxObserverProperty = /*#__PURE__*/newSymbol("isMobXReactObserver");
+var mobxIsUnmounted = /*#__PURE__*/newSymbol("isUnmounted");
+var skipRenderKey = /*#__PURE__*/newSymbol("skipRender");
+var isForcingUpdateKey = /*#__PURE__*/newSymbol("isForcingUpdate");
+function makeClassComponentObserver(componentClass) {
+  var target = componentClass.prototype;
+
+  if (componentClass[mobxObserverProperty]) {
+    var displayName = getDisplayName(target);
+    console.warn("The provided component class (" + displayName + ") \n                has already been declared as an observer component.");
+  } else {
+    componentClass[mobxObserverProperty] = true;
+  }
+
+  if (target.componentWillReact) throw new Error("The componentWillReact life-cycle event is no longer supported");
+
+  if (componentClass["__proto__"] !== PureComponent) {
+    if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU;else if (target.shouldComponentUpdate !== observerSCU) // n.b. unequal check, instead of existence check, as @observer might be on superclass as well
+      throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.");
+  } // this.props and this.state are made observable, just to make sure @computed fields that
+  // are defined inside the component, and which rely on state or props, re-compute if state or props change
+  // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)
+  // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+
+
+
+  makeObservableProp(target, "props");
+  makeObservableProp(target, "state");
+  var baseRender = target.render;
+
+  if (typeof baseRender !== 'function') {
+    var _displayName = getDisplayName(target);
+
+    throw new Error("[mobx-react] class component (" + _displayName + ") is missing `render` method." + "\n`observer` requires `render` being a function defined on prototype." + "\n`render = () => {}` or `render = function() {}` is not supported.");
+  }
+
+  target.render = function () {
+    return makeComponentReactive.call(this, baseRender);
+  };
+
+  patch(target, "componentWillUnmount", function () {
+    var _this$render$mobxAdmi;
+
+    if (isUsingStaticRendering() === true) return;
+    (_this$render$mobxAdmi = this.render[mobxAdminProperty]) == null ? void 0 : _this$render$mobxAdmi.dispose();
+    this[mobxIsUnmounted] = true;
+
+    if (!this.render[mobxAdminProperty]) {
+      // Render may have been hot-swapped and/or overriden by a subclass.
+      var _displayName2 = getDisplayName(this);
+
+      console.warn("The reactive render of an observer class component (" + _displayName2 + ") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.");
+    }
+  });
+  return componentClass;
+} // Generates a friendly name for debugging
+
+function getDisplayName(comp) {
+  return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || "<component>";
+}
+
+function makeComponentReactive(render) {
+  var _this = this;
+
+  if (isUsingStaticRendering() === true) return render.call(this);
+  /**
+   * If props are shallowly modified, react will render anyway,
+   * so atom.reportChanged() should not result in yet another re-render
+   */
+
+  setHiddenProp(this, skipRenderKey, false);
+  /**
+   * forceUpdate will re-assign this.props. We don't want that to cause a loop,
+   * so detect these changes
+   */
+
+  setHiddenProp(this, isForcingUpdateKey, false);
+  var initialName = getDisplayName(this);
+  var baseRender = render.bind(this);
+  var isRenderingPending = false;
+  var reaction = new Reaction(initialName + ".render()", function () {
+    if (!isRenderingPending) {
+      // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)
+      // This unidiomatic React usage but React will correctly warn about this so we continue as usual
+      // See #85 / Pull #44
+      isRenderingPending = true;
+
+      if (_this[mobxIsUnmounted] !== true) {
+        var hasError = true;
+
+        try {
+          setHiddenProp(_this, isForcingUpdateKey, true);
+          if (!_this[skipRenderKey]) Component.prototype.forceUpdate.call(_this);
+          hasError = false;
+        } finally {
+          setHiddenProp(_this, isForcingUpdateKey, false);
+          if (hasError) reaction.dispose();
+        }
+      }
+    }
+  });
+  reaction["reactComponent"] = this;
+  reactiveRender[mobxAdminProperty] = reaction;
+  this.render = reactiveRender;
+
+  function reactiveRender() {
+    isRenderingPending = false;
+    var exception = undefined;
+    var rendering = undefined;
+    reaction.track(function () {
+      try {
+        rendering = _allowStateChanges(false, baseRender);
+      } catch (e) {
+        exception = e;
+      }
+    });
+
+    if (exception) {
+      throw exception;
+    }
+
+    return rendering;
+  }
+
+  return reactiveRender.call(this);
+}
+
+function observerSCU(nextProps, nextState) {
+  if (isUsingStaticRendering()) {
+    console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.");
+  } // update on any state changes (as is the default)
+
+
+  if (this.state !== nextState) {
+    return true;
+  } // update if props are shallowly not equal, inspired by PureRenderMixin
+  // we could return just 'false' here, and avoid the `skipRender` checks etc
+  // however, it is nicer if lifecycle events are triggered like usually,
+  // so we return true here if props are shallowly modified.
+
+
+  return !shallowEqual(this.props, nextProps);
+}
+
+function makeObservableProp(target, propName) {
+  var valueHolderKey = newSymbol("reactProp_" + propName + "_valueHolder");
+  var atomHolderKey = newSymbol("reactProp_" + propName + "_atomHolder");
+
+  function getAtom() {
+    if (!this[atomHolderKey]) {
+      setHiddenProp(this, atomHolderKey, createAtom("reactive " + propName));
+    }
+
+    return this[atomHolderKey];
+  }
+
+  Object.defineProperty(target, propName, {
+    configurable: true,
+    enumerable: true,
+    get: function get() {
+      var prevReadState = false;
+
+      if (_allowStateReadsStart && _allowStateReadsEnd) {
+        prevReadState = _allowStateReadsStart(true);
+      }
+
+      getAtom.call(this).reportObserved();
+
+      if (_allowStateReadsStart && _allowStateReadsEnd) {
+        _allowStateReadsEnd(prevReadState);
+      }
+
+      return this[valueHolderKey];
+    },
+    set: function set(v) {
+      if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {
+        setHiddenProp(this, valueHolderKey, v);
+        setHiddenProp(this, skipRenderKey, true);
+        getAtom.call(this).reportChanged();
+        setHiddenProp(this, skipRenderKey, false);
+      } else {
+        setHiddenProp(this, valueHolderKey, v);
+      }
+    }
+  });
+}
+
+var hasSymbol = typeof Symbol === "function" && Symbol["for"]; // Using react-is had some issues (and operates on elements, not on types), see #608 / #609
+
+var ReactForwardRefSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.forward_ref") : typeof forwardRef === "function" && /*#__PURE__*/forwardRef(function (props) {
+  return null;
+})["$$typeof"];
+var ReactMemoSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.memo") : typeof memo === "function" && /*#__PURE__*/memo(function (props) {
+  return null;
+})["$$typeof"];
+/**
+ * Observer function / decorator
+ */
+
+function observer(component) {
+  if (component["isMobxInjector"] === true) {
+    console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'");
+  }
+
+  if (ReactMemoSymbol && component["$$typeof"] === ReactMemoSymbol) {
+    throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");
+  } // Unwrap forward refs into `<Observer>` component
+  // we need to unwrap the render, because it is the inner render that needs to be tracked,
+  // not the ForwardRef HoC
+
+
+  if (ReactForwardRefSymbol && component["$$typeof"] === ReactForwardRefSymbol) {
+    var baseRender = component["render"];
+    if (typeof baseRender !== "function") throw new Error("render property of ForwardRef was not a function");
+    return forwardRef(function ObserverForwardRef() {
+      var args = arguments;
+      return createElement(Observer, null, function () {
+        return baseRender.apply(undefined, args);
+      });
+    });
+  } // Function component
+
+
+  if (typeof component === "function" && (!component.prototype || !component.prototype.render) && !component["isReactClass"] && !Object.prototype.isPrototypeOf.call(Component, component)) {
+    return observer$1(component);
+  }
+
+  return makeClassComponentObserver(component);
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _objectWithoutPropertiesLoose(source, excluded) {
+  if (source == null) return {};
+  var target = {};
+  var sourceKeys = Object.keys(source);
+  var key, i;
+
+  for (i = 0; i < sourceKeys.length; i++) {
+    key = sourceKeys[i];
+    if (excluded.indexOf(key) >= 0) continue;
+    target[key] = source[key];
+  }
+
+  return target;
+}
+
+var MobXProviderContext = /*#__PURE__*/React__default.createContext({});
+function Provider(props) {
+  var children = props.children,
+      stores = _objectWithoutPropertiesLoose(props, ["children"]);
+
+  var parentValue = React__default.useContext(MobXProviderContext);
+  var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));
+  var value = mutableProviderRef.current;
+
+  {
+    var newValue = _extends({}, value, stores); // spread in previous state for the context based stores
+
+
+    if (!shallowEqual(value, newValue)) {
+      throw new Error("MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.");
+    }
+  }
+
+  return React__default.createElement(MobXProviderContext.Provider, {
+    value: value
+  }, children);
+}
+Provider.displayName = "MobXProvider";
+
+/**
+ * Store Injection
+ */
+
+function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {
+  // Support forward refs
+  var Injector = React__default.forwardRef(function (props, ref) {
+    var newProps = _extends({}, props);
+
+    var context = React__default.useContext(MobXProviderContext);
+    Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});
+
+    if (ref) {
+      newProps.ref = ref;
+    }
+
+    return React__default.createElement(component, newProps);
+  });
+  if (makeReactive) Injector = observer(Injector);
+  Injector["isMobxInjector"] = true; // assigned late to suppress observer warning
+  // Static fields from component should be visible on the generated Injector
+
+  copyStaticProperties(component, Injector);
+  Injector["wrappedComponent"] = component;
+  Injector.displayName = getInjectName(component, injectNames);
+  return Injector;
+}
+
+function getInjectName(component, injectNames) {
+  var displayName;
+  var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component";
+  if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")";
+  return displayName;
+}
+
+function grabStoresByName(storeNames) {
+  return function (baseStores, nextProps) {
+    storeNames.forEach(function (storeName) {
+      if (storeName in nextProps // prefer props over stores
+      ) return;
+      if (!(storeName in baseStores)) throw new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider");
+      nextProps[storeName] = baseStores[storeName];
+    });
+    return nextProps;
+  };
+}
+/**
+ * higher order component that injects stores to a child.
+ * takes either a varargs list of strings, which are stores read from the context,
+ * or a function that manually maps the available stores from the context to props:
+ * storesToProps(mobxStores, props, context) => newProps
+ */
+
+
+function inject() {
+  for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {
+    storeNames[_key] = arguments[_key];
+  }
+
+  if (typeof arguments[0] === "function") {
+    var grabStoresFn = arguments[0];
+    return function (componentClass) {
+      return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);
+    };
+  } else {
+    return function (componentClass) {
+      return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false);
+    };
+  }
+}
+
+var protoStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountProto");
+var instStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountInst");
+
+function runDisposersOnWillUnmount() {
+  var _this = this;
+  [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {
+    var prop = typeof propKeyOrFunction === "string" ? _this[propKeyOrFunction] : propKeyOrFunction;
+
+    if (prop !== undefined && prop !== null) {
+      if (Array.isArray(prop)) prop.map(function (f) {
+        return f();
+      });else prop();
+    }
+  });
+}
+
+function disposeOnUnmount(target, propertyKeyOrFunction) {
+  if (Array.isArray(propertyKeyOrFunction)) {
+    return propertyKeyOrFunction.map(function (fn) {
+      return disposeOnUnmount(target, fn);
+    });
+  }
+
+  var c = Object.getPrototypeOf(target).constructor;
+  var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader
+
+  var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));
+
+  if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {
+    throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");
+  }
+
+  if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function" && !Array.isArray(propertyKeyOrFunction)) {
+    throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");
+  } // decorator's target is the prototype, so it doesn't have any instance properties like props
+
+
+  var isDecorator = typeof propertyKeyOrFunction === "string"; // add property key / function we want run (disposed) to the store
+
+  var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];
+  var store = isDecorator ? // decorators are added to the prototype store
+  target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store
+  target[instStoreKey] || (target[instStoreKey] = []);
+  store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already
+
+  if (!componentWasAlreadyModified) {
+    patch(target, "componentWillUnmount", runDisposersOnWillUnmount);
+  } // return the disposer as is if invoked as a non decorator
+
+
+  if (typeof propertyKeyOrFunction !== "string") {
+    return propertyKeyOrFunction;
+  }
+}
+
+function createChainableTypeChecker(validator) {
+  function checkType(isRequired, props, propName, componentName, location, propFullName) {
+    for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {
+      rest[_key - 6] = arguments[_key];
+    }
+
+    return untracked(function () {
+      componentName = componentName || "<<anonymous>>";
+      propFullName = propFullName || propName;
+
+      if (props[propName] == null) {
+        if (isRequired) {
+          var actual = props[propName] === null ? "null" : "undefined";
+          return new Error("The " + location + " `" + propFullName + "` is marked as required " + "in `" + componentName + "`, but its value is `" + actual + "`.");
+        }
+
+        return null;
+      } else {
+        // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise
+        return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));
+      }
+    });
+  }
+
+  var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable
+
+  chainedCheckType.isRequired = checkType.bind(null, true);
+  return chainedCheckType;
+} // Copied from React.PropTypes
+
+
+function isSymbol(propType, propValue) {
+  // Native Symbol.
+  if (propType === "symbol") {
+    return true;
+  } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+
+
+  if (propValue["@@toStringTag"] === "Symbol") {
+    return true;
+  } // Fallback for non-spec compliant Symbols which are polyfilled.
+
+
+  if (typeof Symbol === "function" && propValue instanceof Symbol) {
+    return true;
+  }
+
+  return false;
+} // Copied from React.PropTypes
+
+
+function getPropType(propValue) {
+  var propType = typeof propValue;
+
+  if (Array.isArray(propValue)) {
+    return "array";
+  }
+
+  if (propValue instanceof RegExp) {
+    // Old webkits (at least until Android 4.0) return 'function' rather than
+    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+    // passes PropTypes.object.
+    return "object";
+  }
+
+  if (isSymbol(propType, propValue)) {
+    return "symbol";
+  }
+
+  return propType;
+} // This handles more types than `getPropType`. Only used for error messages.
+// Copied from React.PropTypes
+
+
+function getPreciseType(propValue) {
+  var propType = getPropType(propValue);
+
+  if (propType === "object") {
+    if (propValue instanceof Date) {
+      return "date";
+    } else if (propValue instanceof RegExp) {
+      return "regexp";
+    }
+  }
+
+  return propType;
+}
+
+function createObservableTypeCheckerCreator(allowNativeType, mobxType) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    return untracked(function () {
+      if (allowNativeType) {
+        if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;
+      }
+
+      var mobxChecker;
+
+      switch (mobxType) {
+        case "Array":
+          mobxChecker = isObservableArray;
+          break;
+
+        case "Object":
+          mobxChecker = isObservableObject;
+          break;
+
+        case "Map":
+          mobxChecker = isObservableMap;
+          break;
+
+        default:
+          throw new Error("Unexpected mobxType: " + mobxType);
+      }
+
+      var propValue = props[propName];
+
+      if (!mobxChecker(propValue)) {
+        var preciseType = getPreciseType(propValue);
+        var nativeTypeExpectationMessage = allowNativeType ? " or javascript `" + mobxType.toLowerCase() + "`" : "";
+        return new Error("Invalid prop `" + propFullName + "` of type `" + preciseType + "` supplied to" + " `" + componentName + "`, expected `mobx.Observable" + mobxType + "`" + nativeTypeExpectationMessage + ".");
+      }
+
+      return null;
+    });
+  });
+}
+
+function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {
+      rest[_key2 - 5] = arguments[_key2];
+    }
+
+    return untracked(function () {
+      if (typeof typeChecker !== "function") {
+        return new Error("Property `" + propFullName + "` of component `" + componentName + "` has " + "invalid PropType notation.");
+      } else {
+        var error = createObservableTypeCheckerCreator(allowNativeType, "Array")(props, propName, componentName, location, propFullName);
+        if (error instanceof Error) return error;
+        var propValue = props[propName];
+
+        for (var i = 0; i < propValue.length; i++) {
+          error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + "[" + i + "]"].concat(rest));
+          if (error instanceof Error) return error;
+        }
+
+        return null;
+      }
+    });
+  });
+}
+
+var observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Array");
+var observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);
+var observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Map");
+var observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Object");
+var arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Array");
+var arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);
+var objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Object");
+var PropTypes = {
+  observableArray: observableArray,
+  observableArrayOf: observableArrayOf,
+  observableMap: observableMap,
+  observableObject: observableObject,
+  arrayOrObservableArray: arrayOrObservableArray,
+  arrayOrObservableArrayOf: arrayOrObservableArrayOf,
+  objectOrObservableObject: objectOrObservableObject
+};
+
+if (!Component) throw new Error("mobx-react requires React to be available");
+if (!observable) throw new Error("mobx-react requires mobx to be available");
+
+export { MobXProviderContext, PropTypes, Provider, disposeOnUnmount, inject, observer };
+//# sourceMappingURL=mobxreact.esm.development.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.development.js.map b/node_modules/mobx-react/dist/mobxreact.esm.development.js.map
new file mode 100644
index 0000000..59ae6a1
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.esm.development.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createSymbol","name","Symbol","symbol","createdSymbols","newSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","copyStaticProperties","base","target","protoProps","getOwnPropertyNames","getPrototypeOf","forEach","key","indexOf","defineProperty","getOwnPropertyDescriptor","setHiddenProp","prop","value","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","getMixins","methodName","methodMixins","locks","methods","wrapper","realMethod","args","retVal","undefined","apply","mx","wrapFunction","fn","patch","mixinMethod","push","oldDefinition","originalMethod","newDefinition","createDefinition","wrappedFunc","get","set","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","ObserverForwardRef","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","newValue","createStoreInjector","grabStoresFn","injectNames","makeReactive","Injector","forwardRef","ref","newProps","context","assign","createElement","getInjectName","componentName","grabStoresByName","storeNames","baseStores","storeName","inject","join","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","disposeOnUnmount","propertyKeyOrFunction","c","c2","c3","isDecorator","componentWasAlreadyModified","store","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","actual","chainedCheckType","isSymbol","propType","propValue","getPropType","RegExp","getPreciseType","Date","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","PropTypes","observable"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.js b/node_modules/mobx-react/dist/mobxreact.esm.js
new file mode 100644
index 0000000..c23780f
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.js
@@ -0,0 +1,782 @@
+import { Reaction, _allowStateChanges, _allowStateReadsStart, _allowStateReadsEnd, $mobx, createAtom, untracked, isObservableMap, isObservableObject, isObservableArray, observable } from 'mobx';
+import React__default, { PureComponent, Component, forwardRef, memo, createElement } from 'react';
+import { isUsingStaticRendering, Observer, observer as observer$1 } from 'mobx-react-lite';
+export { Observer, enableStaticRendering, isUsingStaticRendering, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver, useStaticRendering } from 'mobx-react-lite';
+
+var symbolId = 0;
+
+function createSymbol(name) {
+  if (typeof Symbol === "function") {
+    return Symbol(name);
+  }
+
+  var symbol = "__$mobx-react " + name + " (" + symbolId + ")";
+  symbolId++;
+  return symbol;
+}
+
+var createdSymbols = {};
+function newSymbol(name) {
+  if (!createdSymbols[name]) {
+    createdSymbols[name] = createSymbol(name);
+  }
+
+  return createdSymbols[name];
+}
+function shallowEqual(objA, objB) {
+  //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (is(objA, objB)) return true;
+
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+
+  var keysA = Object.keys(objA);
+  var keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+
+  for (var i = 0; i < keysA.length; i++) {
+    if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+function is(x, y) {
+  // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+
+var hoistBlackList = {
+  $$typeof: 1,
+  render: 1,
+  compare: 1,
+  type: 1,
+  childContextTypes: 1,
+  contextType: 1,
+  contextTypes: 1,
+  defaultProps: 1,
+  getDefaultProps: 1,
+  getDerivedStateFromError: 1,
+  getDerivedStateFromProps: 1,
+  mixins: 1,
+  displayName: 1,
+  propTypes: 1
+};
+function copyStaticProperties(base, target) {
+  var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));
+  Object.getOwnPropertyNames(base).forEach(function (key) {
+    if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
+      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+    }
+  });
+}
+/**
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+ * @param target
+ * @param prop
+ * @param value
+ */
+
+function setHiddenProp(target, prop, value) {
+  if (!Object.hasOwnProperty.call(target, prop)) {
+    Object.defineProperty(target, prop, {
+      enumerable: false,
+      configurable: true,
+      writable: true,
+      value: value
+    });
+  } else {
+    target[prop] = value;
+  }
+}
+/**
+ * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks
+ * and the handler provided by mobx-react
+ */
+
+var mobxMixins = /*#__PURE__*/newSymbol("patchMixins");
+var mobxPatchedDefinition = /*#__PURE__*/newSymbol("patchedDefinition");
+
+function getMixins(target, methodName) {
+  var mixins = target[mobxMixins] = target[mobxMixins] || {};
+  var methodMixins = mixins[methodName] = mixins[methodName] || {};
+  methodMixins.locks = methodMixins.locks || 0;
+  methodMixins.methods = methodMixins.methods || [];
+  return methodMixins;
+}
+
+function wrapper(realMethod, mixins) {
+  var _this = this;
+
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+
+  // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls
+  mixins.locks++;
+
+  try {
+    var retVal;
+
+    if (realMethod !== undefined && realMethod !== null) {
+      retVal = realMethod.apply(this, args);
+    }
+
+    return retVal;
+  } finally {
+    mixins.locks--;
+
+    if (mixins.locks === 0) {
+      mixins.methods.forEach(function (mx) {
+        mx.apply(_this, args);
+      });
+    }
+  }
+}
+
+function wrapFunction(realMethod, mixins) {
+  var fn = function fn() {
+    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      args[_key2] = arguments[_key2];
+    }
+
+    wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));
+  };
+
+  return fn;
+}
+
+function patch(target, methodName, mixinMethod) {
+  var mixins = getMixins(target, methodName);
+
+  if (mixins.methods.indexOf(mixinMethod) < 0) {
+    mixins.methods.push(mixinMethod);
+  }
+
+  var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);
+
+  if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {
+    // already patched definition, do not repatch
+    return;
+  }
+
+  var originalMethod = target[methodName];
+  var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);
+  Object.defineProperty(target, methodName, newDefinition);
+}
+
+function createDefinition(target, methodName, enumerable, mixins, originalMethod) {
+  var _ref;
+
+  var wrappedFunc = wrapFunction(originalMethod, mixins);
+  return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {
+    return wrappedFunc;
+  }, _ref.set = function set(value) {
+    if (this === target) {
+      wrappedFunc = wrapFunction(value, mixins);
+    } else {
+      // when it is an instance of the prototype/a child prototype patch that particular case again separately
+      // since we need to store separate values depending on wether it is the actual instance, the prototype, etc
+      // e.g. the method for super might not be the same as the method for the prototype which might be not the same
+      // as the method for the instance
+      var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);
+      Object.defineProperty(this, methodName, newDefinition);
+    }
+  }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;
+}
+
+var mobxAdminProperty = $mobx || "$mobx";
+var mobxObserverProperty = /*#__PURE__*/newSymbol("isMobXReactObserver");
+var mobxIsUnmounted = /*#__PURE__*/newSymbol("isUnmounted");
+var skipRenderKey = /*#__PURE__*/newSymbol("skipRender");
+var isForcingUpdateKey = /*#__PURE__*/newSymbol("isForcingUpdate");
+function makeClassComponentObserver(componentClass) {
+  var target = componentClass.prototype;
+
+  if (componentClass[mobxObserverProperty]) {
+    var displayName = getDisplayName(target);
+    console.warn("The provided component class (" + displayName + ") \n                has already been declared as an observer component.");
+  } else {
+    componentClass[mobxObserverProperty] = true;
+  }
+
+  if (target.componentWillReact) throw new Error("The componentWillReact life-cycle event is no longer supported");
+
+  if (componentClass["__proto__"] !== PureComponent) {
+    if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU;else if (target.shouldComponentUpdate !== observerSCU) // n.b. unequal check, instead of existence check, as @observer might be on superclass as well
+      throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.");
+  } // this.props and this.state are made observable, just to make sure @computed fields that
+  // are defined inside the component, and which rely on state or props, re-compute if state or props change
+  // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)
+  // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+
+
+
+  makeObservableProp(target, "props");
+  makeObservableProp(target, "state");
+  var baseRender = target.render;
+
+  if (typeof baseRender !== 'function') {
+    var _displayName = getDisplayName(target);
+
+    throw new Error("[mobx-react] class component (" + _displayName + ") is missing `render` method." + "\n`observer` requires `render` being a function defined on prototype." + "\n`render = () => {}` or `render = function() {}` is not supported.");
+  }
+
+  target.render = function () {
+    return makeComponentReactive.call(this, baseRender);
+  };
+
+  patch(target, "componentWillUnmount", function () {
+    var _this$render$mobxAdmi;
+
+    if (isUsingStaticRendering() === true) return;
+    (_this$render$mobxAdmi = this.render[mobxAdminProperty]) == null ? void 0 : _this$render$mobxAdmi.dispose();
+    this[mobxIsUnmounted] = true;
+
+    if (!this.render[mobxAdminProperty]) {
+      // Render may have been hot-swapped and/or overriden by a subclass.
+      var _displayName2 = getDisplayName(this);
+
+      console.warn("The reactive render of an observer class component (" + _displayName2 + ") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.");
+    }
+  });
+  return componentClass;
+} // Generates a friendly name for debugging
+
+function getDisplayName(comp) {
+  return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || "<component>";
+}
+
+function makeComponentReactive(render) {
+  var _this = this;
+
+  if (isUsingStaticRendering() === true) return render.call(this);
+  /**
+   * If props are shallowly modified, react will render anyway,
+   * so atom.reportChanged() should not result in yet another re-render
+   */
+
+  setHiddenProp(this, skipRenderKey, false);
+  /**
+   * forceUpdate will re-assign this.props. We don't want that to cause a loop,
+   * so detect these changes
+   */
+
+  setHiddenProp(this, isForcingUpdateKey, false);
+  var initialName = getDisplayName(this);
+  var baseRender = render.bind(this);
+  var isRenderingPending = false;
+  var reaction = new Reaction(initialName + ".render()", function () {
+    if (!isRenderingPending) {
+      // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)
+      // This unidiomatic React usage but React will correctly warn about this so we continue as usual
+      // See #85 / Pull #44
+      isRenderingPending = true;
+
+      if (_this[mobxIsUnmounted] !== true) {
+        var hasError = true;
+
+        try {
+          setHiddenProp(_this, isForcingUpdateKey, true);
+          if (!_this[skipRenderKey]) Component.prototype.forceUpdate.call(_this);
+          hasError = false;
+        } finally {
+          setHiddenProp(_this, isForcingUpdateKey, false);
+          if (hasError) reaction.dispose();
+        }
+      }
+    }
+  });
+  reaction["reactComponent"] = this;
+  reactiveRender[mobxAdminProperty] = reaction;
+  this.render = reactiveRender;
+
+  function reactiveRender() {
+    isRenderingPending = false;
+    var exception = undefined;
+    var rendering = undefined;
+    reaction.track(function () {
+      try {
+        rendering = _allowStateChanges(false, baseRender);
+      } catch (e) {
+        exception = e;
+      }
+    });
+
+    if (exception) {
+      throw exception;
+    }
+
+    return rendering;
+  }
+
+  return reactiveRender.call(this);
+}
+
+function observerSCU(nextProps, nextState) {
+  if (isUsingStaticRendering()) {
+    console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.");
+  } // update on any state changes (as is the default)
+
+
+  if (this.state !== nextState) {
+    return true;
+  } // update if props are shallowly not equal, inspired by PureRenderMixin
+  // we could return just 'false' here, and avoid the `skipRender` checks etc
+  // however, it is nicer if lifecycle events are triggered like usually,
+  // so we return true here if props are shallowly modified.
+
+
+  return !shallowEqual(this.props, nextProps);
+}
+
+function makeObservableProp(target, propName) {
+  var valueHolderKey = newSymbol("reactProp_" + propName + "_valueHolder");
+  var atomHolderKey = newSymbol("reactProp_" + propName + "_atomHolder");
+
+  function getAtom() {
+    if (!this[atomHolderKey]) {
+      setHiddenProp(this, atomHolderKey, createAtom("reactive " + propName));
+    }
+
+    return this[atomHolderKey];
+  }
+
+  Object.defineProperty(target, propName, {
+    configurable: true,
+    enumerable: true,
+    get: function get() {
+      var prevReadState = false;
+
+      if (_allowStateReadsStart && _allowStateReadsEnd) {
+        prevReadState = _allowStateReadsStart(true);
+      }
+
+      getAtom.call(this).reportObserved();
+
+      if (_allowStateReadsStart && _allowStateReadsEnd) {
+        _allowStateReadsEnd(prevReadState);
+      }
+
+      return this[valueHolderKey];
+    },
+    set: function set(v) {
+      if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {
+        setHiddenProp(this, valueHolderKey, v);
+        setHiddenProp(this, skipRenderKey, true);
+        getAtom.call(this).reportChanged();
+        setHiddenProp(this, skipRenderKey, false);
+      } else {
+        setHiddenProp(this, valueHolderKey, v);
+      }
+    }
+  });
+}
+
+var hasSymbol = typeof Symbol === "function" && Symbol["for"]; // Using react-is had some issues (and operates on elements, not on types), see #608 / #609
+
+var ReactForwardRefSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.forward_ref") : typeof forwardRef === "function" && /*#__PURE__*/forwardRef(function (props) {
+  return null;
+})["$$typeof"];
+var ReactMemoSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.memo") : typeof memo === "function" && /*#__PURE__*/memo(function (props) {
+  return null;
+})["$$typeof"];
+/**
+ * Observer function / decorator
+ */
+
+function observer(component) {
+  if (component["isMobxInjector"] === true) {
+    console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'");
+  }
+
+  if (ReactMemoSymbol && component["$$typeof"] === ReactMemoSymbol) {
+    throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");
+  } // Unwrap forward refs into `<Observer>` component
+  // we need to unwrap the render, because it is the inner render that needs to be tracked,
+  // not the ForwardRef HoC
+
+
+  if (ReactForwardRefSymbol && component["$$typeof"] === ReactForwardRefSymbol) {
+    var baseRender = component["render"];
+    if (typeof baseRender !== "function") throw new Error("render property of ForwardRef was not a function");
+    return forwardRef(function ObserverForwardRef() {
+      var args = arguments;
+      return createElement(Observer, null, function () {
+        return baseRender.apply(undefined, args);
+      });
+    });
+  } // Function component
+
+
+  if (typeof component === "function" && (!component.prototype || !component.prototype.render) && !component["isReactClass"] && !Object.prototype.isPrototypeOf.call(Component, component)) {
+    return observer$1(component);
+  }
+
+  return makeClassComponentObserver(component);
+}
+
+function _extends() {
+  _extends = Object.assign || function (target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i];
+
+      for (var key in source) {
+        if (Object.prototype.hasOwnProperty.call(source, key)) {
+          target[key] = source[key];
+        }
+      }
+    }
+
+    return target;
+  };
+
+  return _extends.apply(this, arguments);
+}
+
+function _objectWithoutPropertiesLoose(source, excluded) {
+  if (source == null) return {};
+  var target = {};
+  var sourceKeys = Object.keys(source);
+  var key, i;
+
+  for (i = 0; i < sourceKeys.length; i++) {
+    key = sourceKeys[i];
+    if (excluded.indexOf(key) >= 0) continue;
+    target[key] = source[key];
+  }
+
+  return target;
+}
+
+var MobXProviderContext = /*#__PURE__*/React__default.createContext({});
+function Provider(props) {
+  var children = props.children,
+      stores = _objectWithoutPropertiesLoose(props, ["children"]);
+
+  var parentValue = React__default.useContext(MobXProviderContext);
+  var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));
+  var value = mutableProviderRef.current;
+
+  if (process.env.NODE_ENV !== "production") {
+    var newValue = _extends({}, value, stores); // spread in previous state for the context based stores
+
+
+    if (!shallowEqual(value, newValue)) {
+      throw new Error("MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.");
+    }
+  }
+
+  return React__default.createElement(MobXProviderContext.Provider, {
+    value: value
+  }, children);
+}
+Provider.displayName = "MobXProvider";
+
+/**
+ * Store Injection
+ */
+
+function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {
+  // Support forward refs
+  var Injector = React__default.forwardRef(function (props, ref) {
+    var newProps = _extends({}, props);
+
+    var context = React__default.useContext(MobXProviderContext);
+    Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});
+
+    if (ref) {
+      newProps.ref = ref;
+    }
+
+    return React__default.createElement(component, newProps);
+  });
+  if (makeReactive) Injector = observer(Injector);
+  Injector["isMobxInjector"] = true; // assigned late to suppress observer warning
+  // Static fields from component should be visible on the generated Injector
+
+  copyStaticProperties(component, Injector);
+  Injector["wrappedComponent"] = component;
+  Injector.displayName = getInjectName(component, injectNames);
+  return Injector;
+}
+
+function getInjectName(component, injectNames) {
+  var displayName;
+  var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component";
+  if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")";
+  return displayName;
+}
+
+function grabStoresByName(storeNames) {
+  return function (baseStores, nextProps) {
+    storeNames.forEach(function (storeName) {
+      if (storeName in nextProps // prefer props over stores
+      ) return;
+      if (!(storeName in baseStores)) throw new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider");
+      nextProps[storeName] = baseStores[storeName];
+    });
+    return nextProps;
+  };
+}
+/**
+ * higher order component that injects stores to a child.
+ * takes either a varargs list of strings, which are stores read from the context,
+ * or a function that manually maps the available stores from the context to props:
+ * storesToProps(mobxStores, props, context) => newProps
+ */
+
+
+function inject() {
+  for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {
+    storeNames[_key] = arguments[_key];
+  }
+
+  if (typeof arguments[0] === "function") {
+    var grabStoresFn = arguments[0];
+    return function (componentClass) {
+      return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);
+    };
+  } else {
+    return function (componentClass) {
+      return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false);
+    };
+  }
+}
+
+var protoStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountProto");
+var instStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountInst");
+
+function runDisposersOnWillUnmount() {
+  var _this = this;
+  [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {
+    var prop = typeof propKeyOrFunction === "string" ? _this[propKeyOrFunction] : propKeyOrFunction;
+
+    if (prop !== undefined && prop !== null) {
+      if (Array.isArray(prop)) prop.map(function (f) {
+        return f();
+      });else prop();
+    }
+  });
+}
+
+function disposeOnUnmount(target, propertyKeyOrFunction) {
+  if (Array.isArray(propertyKeyOrFunction)) {
+    return propertyKeyOrFunction.map(function (fn) {
+      return disposeOnUnmount(target, fn);
+    });
+  }
+
+  var c = Object.getPrototypeOf(target).constructor;
+  var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader
+
+  var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));
+
+  if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {
+    throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");
+  }
+
+  if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function" && !Array.isArray(propertyKeyOrFunction)) {
+    throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");
+  } // decorator's target is the prototype, so it doesn't have any instance properties like props
+
+
+  var isDecorator = typeof propertyKeyOrFunction === "string"; // add property key / function we want run (disposed) to the store
+
+  var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];
+  var store = isDecorator ? // decorators are added to the prototype store
+  target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store
+  target[instStoreKey] || (target[instStoreKey] = []);
+  store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already
+
+  if (!componentWasAlreadyModified) {
+    patch(target, "componentWillUnmount", runDisposersOnWillUnmount);
+  } // return the disposer as is if invoked as a non decorator
+
+
+  if (typeof propertyKeyOrFunction !== "string") {
+    return propertyKeyOrFunction;
+  }
+}
+
+function createChainableTypeChecker(validator) {
+  function checkType(isRequired, props, propName, componentName, location, propFullName) {
+    for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {
+      rest[_key - 6] = arguments[_key];
+    }
+
+    return untracked(function () {
+      componentName = componentName || "<<anonymous>>";
+      propFullName = propFullName || propName;
+
+      if (props[propName] == null) {
+        if (isRequired) {
+          var actual = props[propName] === null ? "null" : "undefined";
+          return new Error("The " + location + " `" + propFullName + "` is marked as required " + "in `" + componentName + "`, but its value is `" + actual + "`.");
+        }
+
+        return null;
+      } else {
+        // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise
+        return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));
+      }
+    });
+  }
+
+  var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable
+
+  chainedCheckType.isRequired = checkType.bind(null, true);
+  return chainedCheckType;
+} // Copied from React.PropTypes
+
+
+function isSymbol(propType, propValue) {
+  // Native Symbol.
+  if (propType === "symbol") {
+    return true;
+  } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+
+
+  if (propValue["@@toStringTag"] === "Symbol") {
+    return true;
+  } // Fallback for non-spec compliant Symbols which are polyfilled.
+
+
+  if (typeof Symbol === "function" && propValue instanceof Symbol) {
+    return true;
+  }
+
+  return false;
+} // Copied from React.PropTypes
+
+
+function getPropType(propValue) {
+  var propType = typeof propValue;
+
+  if (Array.isArray(propValue)) {
+    return "array";
+  }
+
+  if (propValue instanceof RegExp) {
+    // Old webkits (at least until Android 4.0) return 'function' rather than
+    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+    // passes PropTypes.object.
+    return "object";
+  }
+
+  if (isSymbol(propType, propValue)) {
+    return "symbol";
+  }
+
+  return propType;
+} // This handles more types than `getPropType`. Only used for error messages.
+// Copied from React.PropTypes
+
+
+function getPreciseType(propValue) {
+  var propType = getPropType(propValue);
+
+  if (propType === "object") {
+    if (propValue instanceof Date) {
+      return "date";
+    } else if (propValue instanceof RegExp) {
+      return "regexp";
+    }
+  }
+
+  return propType;
+}
+
+function createObservableTypeCheckerCreator(allowNativeType, mobxType) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    return untracked(function () {
+      if (allowNativeType) {
+        if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;
+      }
+
+      var mobxChecker;
+
+      switch (mobxType) {
+        case "Array":
+          mobxChecker = isObservableArray;
+          break;
+
+        case "Object":
+          mobxChecker = isObservableObject;
+          break;
+
+        case "Map":
+          mobxChecker = isObservableMap;
+          break;
+
+        default:
+          throw new Error("Unexpected mobxType: " + mobxType);
+      }
+
+      var propValue = props[propName];
+
+      if (!mobxChecker(propValue)) {
+        var preciseType = getPreciseType(propValue);
+        var nativeTypeExpectationMessage = allowNativeType ? " or javascript `" + mobxType.toLowerCase() + "`" : "";
+        return new Error("Invalid prop `" + propFullName + "` of type `" + preciseType + "` supplied to" + " `" + componentName + "`, expected `mobx.Observable" + mobxType + "`" + nativeTypeExpectationMessage + ".");
+      }
+
+      return null;
+    });
+  });
+}
+
+function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {
+  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+    for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {
+      rest[_key2 - 5] = arguments[_key2];
+    }
+
+    return untracked(function () {
+      if (typeof typeChecker !== "function") {
+        return new Error("Property `" + propFullName + "` of component `" + componentName + "` has " + "invalid PropType notation.");
+      } else {
+        var error = createObservableTypeCheckerCreator(allowNativeType, "Array")(props, propName, componentName, location, propFullName);
+        if (error instanceof Error) return error;
+        var propValue = props[propName];
+
+        for (var i = 0; i < propValue.length; i++) {
+          error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + "[" + i + "]"].concat(rest));
+          if (error instanceof Error) return error;
+        }
+
+        return null;
+      }
+    });
+  });
+}
+
+var observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Array");
+var observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);
+var observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Map");
+var observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Object");
+var arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Array");
+var arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);
+var objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Object");
+var PropTypes = {
+  observableArray: observableArray,
+  observableArrayOf: observableArrayOf,
+  observableMap: observableMap,
+  observableObject: observableObject,
+  arrayOrObservableArray: arrayOrObservableArray,
+  arrayOrObservableArrayOf: arrayOrObservableArrayOf,
+  objectOrObservableObject: objectOrObservableObject
+};
+
+if (!Component) throw new Error("mobx-react requires React to be available");
+if (!observable) throw new Error("mobx-react requires mobx to be available");
+
+export { MobXProviderContext, PropTypes, Provider, disposeOnUnmount, inject, observer };
+//# sourceMappingURL=mobxreact.esm.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.js.map b/node_modules/mobx-react/dist/mobxreact.esm.js.map
new file mode 100644
index 0000000..2d76012
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.esm.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createSymbol","name","Symbol","symbol","createdSymbols","newSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","copyStaticProperties","base","target","protoProps","getOwnPropertyNames","getPrototypeOf","forEach","key","indexOf","defineProperty","getOwnPropertyDescriptor","setHiddenProp","prop","value","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","getMixins","methodName","methodMixins","locks","methods","wrapper","realMethod","args","retVal","undefined","apply","mx","wrapFunction","fn","patch","mixinMethod","push","oldDefinition","originalMethod","newDefinition","createDefinition","wrappedFunc","get","set","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","ObserverForwardRef","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","newValue","createStoreInjector","grabStoresFn","injectNames","makeReactive","Injector","forwardRef","ref","newProps","context","assign","createElement","getInjectName","componentName","grabStoresByName","storeNames","baseStores","storeName","inject","join","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","disposeOnUnmount","propertyKeyOrFunction","c","c2","c3","isDecorator","componentWasAlreadyModified","store","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","actual","chainedCheckType","isSymbol","propType","propValue","getPropType","RegExp","getPreciseType","Date","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","PropTypes","observable"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.production.min.js b/node_modules/mobx-react/dist/mobxreact.esm.production.min.js
new file mode 100644
index 0000000..864f444
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.production.min.js
@@ -0,0 +1,2 @@
+import{Reaction as e,_allowStateChanges as r,_allowStateReadsStart as t,_allowStateReadsEnd as n,$mobx as o,createAtom as i,untracked as a,isObservableMap as c,isObservableObject as s,isObservableArray as u,observable as f}from"mobx";import l,{PureComponent as p,Component as y,forwardRef as b,memo as d,createElement as m}from"react";import{isUsingStaticRendering as v,Observer as h,observer as O}from"mobx-react-lite";export{Observer,enableStaticRendering,isUsingStaticRendering,observerBatching,useAsObservableSource,useLocalObservable,useLocalStore,useObserver,useStaticRendering}from"mobx-react-lite";var w=0,g={};function j(e){return g[e]||(g[e]=function(e){if("function"==typeof Symbol)return Symbol(e);var r="__$mobx-react "+e+" ("+w+")";return w++,r}(e)),g[e]}function x(e,r){if(P(e,r))return!0;if("object"!=typeof e||null===e||"object"!=typeof r||null===r)return!1;var t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(var o=0;o<t.length;o++)if(!Object.hasOwnProperty.call(r,t[o])||!P(e[t[o]],r[t[o]]))return!1;return!0}function P(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}var E={$$typeof:1,render:1,compare:1,type:1,childContextTypes:1,contextType:1,contextTypes:1,defaultProps:1,getDefaultProps:1,getDerivedStateFromError:1,getDerivedStateFromProps:1,mixins:1,displayName:1,propTypes:1};function C(e,r,t){Object.hasOwnProperty.call(e,r)?e[r]=t:Object.defineProperty(e,r,{enumerable:!1,configurable:!0,writable:!0,value:t})}var A=j("patchMixins"),R=j("patchedDefinition");function k(e,r){for(var t=this,n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];r.locks++;try{var a;return null!=e&&(a=e.apply(this,o)),a}finally{r.locks--,0===r.locks&&r.methods.forEach((function(e){e.apply(t,o)}))}}function S(e,r){return function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];k.call.apply(k,[this,e,r].concat(n))}}function U(e,r,t){var n=function(e,r){var t=e[A]=e[A]||{},n=t[r]=t[r]||{};return n.locks=n.locks||0,n.methods=n.methods||[],n}(e,r);n.methods.indexOf(t)<0&&n.methods.push(t);var o=Object.getOwnPropertyDescriptor(e,r);if(!o||!o[R]){var i=function e(r,t,n,o,i){var a,c=S(i,o);return(a={})[R]=!0,a.get=function(){return c},a.set=function(i){if(this===r)c=S(i,o);else{var a=e(this,t,n,o,i);Object.defineProperty(this,t,a)}},a.configurable=!0,a.enumerable=n,a}(e,r,o?o.enumerable:void 0,n,e[r]);Object.defineProperty(e,r,i)}}var M=o||"$mobx",T=j("isMobXReactObserver"),$=j("isUnmounted"),_=j("skipRender"),N=j("isForcingUpdate");function D(e){var r=e.prototype;if(e[T]){var t=I(r);console.warn("The provided component class ("+t+") \n                has already been declared as an observer component.")}else e[T]=!0;if(r.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==p)if(r.shouldComponentUpdate){if(r.shouldComponentUpdate!==F)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else r.shouldComponentUpdate=F;L(r,"props"),L(r,"state");var n=r.render;if("function"!=typeof n){var o=I(r);throw new Error("[mobx-react] class component ("+o+") is missing `render` method.\n`observer` requires `render` being a function defined on prototype.\n`render = () => {}` or `render = function() {}` is not supported.")}return r.render=function(){return q.call(this,n)},U(r,"componentWillUnmount",(function(){var e;if(!0!==v()&&(null==(e=this.render[M])||e.dispose(),this[$]=!0,!this.render[M])){var r=I(this);console.warn("The reactive render of an observer class component ("+r+") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.")}})),e}function I(e){return e.displayName||e.name||e.constructor&&(e.constructor.displayName||e.constructor.name)||"<component>"}function q(t){var n=this;if(!0===v())return t.call(this);C(this,_,!1),C(this,N,!1);var o=I(this),i=t.bind(this),a=!1,c=new e(o+".render()",(function(){if(!a&&(a=!0,!0!==n[$])){var e=!0;try{C(n,N,!0),n[_]||y.prototype.forceUpdate.call(n),e=!1}finally{C(n,N,!1),e&&c.dispose()}}}));function s(){a=!1;var e=void 0,t=void 0;if(c.track((function(){try{t=r(!1,i)}catch(r){e=r}})),e)throw e;return t}return c.reactComponent=this,s[M]=c,this.render=s,s.call(this)}function F(e,r){return v()&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==r||!x(this.props,e)}function L(e,r){var o=j("reactProp_"+r+"_valueHolder"),a=j("reactProp_"+r+"_atomHolder");function c(){return this[a]||C(this,a,i("reactive "+r)),this[a]}Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get:function(){var e=!1;return t&&n&&(e=t(!0)),c.call(this).reportObserved(),t&&n&&n(e),this[o]},set:function(e){this[N]||x(this[o],e)?C(this,o,e):(C(this,o,e),C(this,_,!0),c.call(this).reportChanged(),C(this,_,!1))}})}var W="function"==typeof Symbol&&Symbol.for,X=W?Symbol.for("react.forward_ref"):"function"==typeof b&&b((function(e){return null})).$$typeof,H=W?Symbol.for("react.memo"):"function"==typeof d&&d((function(e){return null})).$$typeof;function Y(e){if(!0===e.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),H&&e.$$typeof===H)throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(X&&e.$$typeof===X){var r=e.render;if("function"!=typeof r)throw new Error("render property of ForwardRef was not a function");return b((function(){var e=arguments;return m(h,null,(function(){return r.apply(void 0,e)}))}))}return"function"!=typeof e||e.prototype&&e.prototype.render||e.isReactClass||Object.prototype.isPrototypeOf.call(y,e)?D(e):O(e)}function B(){return(B=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var z=l.createContext({});function G(e){var r=e.children,t=function(e,r){if(null==e)return{};var t,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r.indexOf(t=i[n])>=0||(o[t]=e[t]);return o}(e,["children"]),n=l.useContext(z),o=l.useRef(B({},n,t));return l.createElement(z.Provider,{value:o.current},r)}function J(e,r,t,n){var o,i,a,c=l.forwardRef((function(t,n){var o=B({},t),i=l.useContext(z);return Object.assign(o,e(i||{},o)||{}),n&&(o.ref=n),l.createElement(r,o)}));return n&&(c=Y(c)),c.isMobxInjector=!0,o=r,i=c,a=Object.getOwnPropertyNames(Object.getPrototypeOf(o)),Object.getOwnPropertyNames(o).forEach((function(e){E[e]||-1!==a.indexOf(e)||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(o,e))})),c.wrappedComponent=r,c.displayName=function(e,r){var t=e.displayName||e.name||e.constructor&&e.constructor.name||"Component";return r?"inject-with-"+r+"("+t+")":"inject("+t+")"}(r,t),c}function K(e){return function(r,t){return e.forEach((function(e){if(!(e in t)){if(!(e in r))throw new Error("MobX injector: Store '"+e+"' is not available! Make sure it is provided by some Provider");t[e]=r[e]}})),t}}function Q(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];if("function"==typeof arguments[0]){var n=arguments[0];return function(e){return J(n,e,n.name,!0)}}return function(e){return J(K(r),e,r.join("-"),!1)}}G.displayName="MobXProvider";var V=j("disposeOnUnmountProto"),Z=j("disposeOnUnmountInst");function ee(){var e=this;[].concat(this[V]||[],this[Z]||[]).forEach((function(r){var t="string"==typeof r?e[r]:r;null!=t&&(Array.isArray(t)?t.map((function(e){return e()})):t())}))}function re(e,r){if(Array.isArray(r))return r.map((function(r){return re(e,r)}));var t=Object.getPrototypeOf(e).constructor,n=Object.getPrototypeOf(e.constructor),o=Object.getPrototypeOf(Object.getPrototypeOf(e));if(t!==l.Component&&t!==l.PureComponent&&n!==l.Component&&n!==l.PureComponent&&o!==l.Component&&o!==l.PureComponent)throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");if("string"!=typeof r&&"function"!=typeof r&&!Array.isArray(r))throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");var i=!!e[V]||!!e[Z];return("string"==typeof r?e[V]||(e[V]=[]):e[Z]||(e[Z]=[])).push(r),i||U(e,"componentWillUnmount",ee),"string"!=typeof r?r:void 0}function te(e){function r(r,t,n,o,i,c){for(var s=arguments.length,u=new Array(s>6?s-6:0),f=6;f<s;f++)u[f-6]=arguments[f];return a((function(){return o=o||"<<anonymous>>",c=c||n,null==t[n]?r?new Error("The "+i+" `"+c+"` is marked as required in `"+o+"`, but its value is `"+(null===t[n]?"null":"undefined")+"`."):null:e.apply(void 0,[t,n,o,i,c].concat(u))}))}var t=r.bind(null,!1);return t.isRequired=r.bind(null,!0),t}function ne(e){var r=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":function(e,r){return"symbol"===e||"Symbol"===r["@@toStringTag"]||"function"==typeof Symbol&&r instanceof Symbol}(r,e)?"symbol":r}function oe(e,r){return te((function(t,n,o,i,f){return a((function(){if(e&&ne(t[n])===r.toLowerCase())return null;var i;switch(r){case"Array":i=u;break;case"Object":i=s;break;case"Map":i=c;break;default:throw new Error("Unexpected mobxType: "+r)}var a=t[n];if(!i(a)){var l=function(e){var r=ne(e);if("object"===r){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return r}(a),p=e?" or javascript `"+r.toLowerCase()+"`":"";return new Error("Invalid prop `"+f+"` of type `"+l+"` supplied to `"+o+"`, expected `mobx.Observable"+r+"`"+p+".")}return null}))}))}function ie(e,r){return te((function(t,n,o,i,c){for(var s=arguments.length,u=new Array(s>5?s-5:0),f=5;f<s;f++)u[f-5]=arguments[f];return a((function(){if("function"!=typeof r)return new Error("Property `"+c+"` of component `"+o+"` has invalid PropType notation.");var a=oe(e,"Array")(t,n,o,i,c);if(a instanceof Error)return a;for(var s=t[n],f=0;f<s.length;f++)if((a=r.apply(void 0,[s,f,o,i,c+"["+f+"]"].concat(u)))instanceof Error)return a;return null}))}))}var ae={observableArray:oe(!1,"Array"),observableArrayOf:ie.bind(null,!1),observableMap:oe(!1,"Map"),observableObject:oe(!1,"Object"),arrayOrObservableArray:oe(!0,"Array"),arrayOrObservableArrayOf:ie.bind(null,!0),objectOrObservableObject:oe(!0,"Object")};if(!y)throw new Error("mobx-react requires React to be available");if(!f)throw new Error("mobx-react requires mobx to be available");export{z as MobXProviderContext,ae as PropTypes,G as Provider,re as disposeOnUnmount,Q as inject,Y as observer};
+//# sourceMappingURL=mobxreact.esm.production.min.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.esm.production.min.js.map b/node_modules/mobx-react/dist/mobxreact.esm.production.min.js.map
new file mode 100644
index 0000000..9c06632
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.esm.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.esm.production.min.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createdSymbols","newSymbol","name","Symbol","symbol","createSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","setHiddenProp","target","prop","value","defineProperty","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","wrapper","realMethod","args","locks","retVal","apply","this","methods","forEach","mx","_this","wrapFunction","patch","methodName","mixinMethod","methodMixins","getMixins","indexOf","push","oldDefinition","getOwnPropertyDescriptor","newDefinition","createDefinition","originalMethod","wrappedFunc","get","set","undefined","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","createStoreInjector","grabStoresFn","injectNames","makeReactive","base","protoProps","Injector","forwardRef","ref","newProps","context","assign","createElement","getOwnPropertyNames","getPrototypeOf","key","componentName","getInjectName","grabStoresByName","storeNames","baseStores","storeName","inject","join","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","disposeOnUnmount","propertyKeyOrFunction","fn","c","c2","c3","componentWasAlreadyModified","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","chainedCheckType","getPropType","propValue","propType","RegExp","isSymbol","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","Date","getPreciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","PropTypes","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","observable"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.umd.development.js b/node_modules/mobx-react/dist/mobxreact.umd.development.js
new file mode 100644
index 0000000..720e522
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.umd.development.js
@@ -0,0 +1,848 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('mobx'), require('react'), require('mobx-react-lite')) :
+    typeof define === 'function' && define.amd ? define(['exports', 'mobx', 'react', 'mobx-react-lite'], factory) :
+    (global = global || self, factory(global.mobxReact = {}, global.mobx, global.React, global.mobxReactLite));
+}(this, (function (exports, mobx, React, mobxReactLite) { 'use strict';
+
+    var React__default = 'default' in React ? React['default'] : React;
+
+    var symbolId = 0;
+
+    function createSymbol(name) {
+      if (typeof Symbol === "function") {
+        return Symbol(name);
+      }
+
+      var symbol = "__$mobx-react " + name + " (" + symbolId + ")";
+      symbolId++;
+      return symbol;
+    }
+
+    var createdSymbols = {};
+    function newSymbol(name) {
+      if (!createdSymbols[name]) {
+        createdSymbols[name] = createSymbol(name);
+      }
+
+      return createdSymbols[name];
+    }
+    function shallowEqual(objA, objB) {
+      //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+      if (is(objA, objB)) return true;
+
+      if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+        return false;
+      }
+
+      var keysA = Object.keys(objA);
+      var keysB = Object.keys(objB);
+      if (keysA.length !== keysB.length) return false;
+
+      for (var i = 0; i < keysA.length; i++) {
+        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+          return false;
+        }
+      }
+
+      return true;
+    }
+
+    function is(x, y) {
+      // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+      if (x === y) {
+        return x !== 0 || 1 / x === 1 / y;
+      } else {
+        return x !== x && y !== y;
+      }
+    } // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+
+
+    var hoistBlackList = {
+      $$typeof: 1,
+      render: 1,
+      compare: 1,
+      type: 1,
+      childContextTypes: 1,
+      contextType: 1,
+      contextTypes: 1,
+      defaultProps: 1,
+      getDefaultProps: 1,
+      getDerivedStateFromError: 1,
+      getDerivedStateFromProps: 1,
+      mixins: 1,
+      displayName: 1,
+      propTypes: 1
+    };
+    function copyStaticProperties(base, target) {
+      var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));
+      Object.getOwnPropertyNames(base).forEach(function (key) {
+        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
+          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));
+        }
+      });
+    }
+    /**
+     * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+     * @param target
+     * @param prop
+     * @param value
+     */
+
+    function setHiddenProp(target, prop, value) {
+      if (!Object.hasOwnProperty.call(target, prop)) {
+        Object.defineProperty(target, prop, {
+          enumerable: false,
+          configurable: true,
+          writable: true,
+          value: value
+        });
+      } else {
+        target[prop] = value;
+      }
+    }
+    /**
+     * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks
+     * and the handler provided by mobx-react
+     */
+
+    var mobxMixins = /*#__PURE__*/newSymbol("patchMixins");
+    var mobxPatchedDefinition = /*#__PURE__*/newSymbol("patchedDefinition");
+
+    function getMixins(target, methodName) {
+      var mixins = target[mobxMixins] = target[mobxMixins] || {};
+      var methodMixins = mixins[methodName] = mixins[methodName] || {};
+      methodMixins.locks = methodMixins.locks || 0;
+      methodMixins.methods = methodMixins.methods || [];
+      return methodMixins;
+    }
+
+    function wrapper(realMethod, mixins) {
+      var _this = this;
+
+      for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+        args[_key - 2] = arguments[_key];
+      }
+
+      // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls
+      mixins.locks++;
+
+      try {
+        var retVal;
+
+        if (realMethod !== undefined && realMethod !== null) {
+          retVal = realMethod.apply(this, args);
+        }
+
+        return retVal;
+      } finally {
+        mixins.locks--;
+
+        if (mixins.locks === 0) {
+          mixins.methods.forEach(function (mx) {
+            mx.apply(_this, args);
+          });
+        }
+      }
+    }
+
+    function wrapFunction(realMethod, mixins) {
+      var fn = function fn() {
+        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+          args[_key2] = arguments[_key2];
+        }
+
+        wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));
+      };
+
+      return fn;
+    }
+
+    function patch(target, methodName, mixinMethod) {
+      var mixins = getMixins(target, methodName);
+
+      if (mixins.methods.indexOf(mixinMethod) < 0) {
+        mixins.methods.push(mixinMethod);
+      }
+
+      var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);
+
+      if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {
+        // already patched definition, do not repatch
+        return;
+      }
+
+      var originalMethod = target[methodName];
+      var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);
+      Object.defineProperty(target, methodName, newDefinition);
+    }
+
+    function createDefinition(target, methodName, enumerable, mixins, originalMethod) {
+      var _ref;
+
+      var wrappedFunc = wrapFunction(originalMethod, mixins);
+      return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {
+        return wrappedFunc;
+      }, _ref.set = function set(value) {
+        if (this === target) {
+          wrappedFunc = wrapFunction(value, mixins);
+        } else {
+          // when it is an instance of the prototype/a child prototype patch that particular case again separately
+          // since we need to store separate values depending on wether it is the actual instance, the prototype, etc
+          // e.g. the method for super might not be the same as the method for the prototype which might be not the same
+          // as the method for the instance
+          var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);
+          Object.defineProperty(this, methodName, newDefinition);
+        }
+      }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;
+    }
+
+    var mobxAdminProperty = mobx.$mobx || "$mobx";
+    var mobxObserverProperty = /*#__PURE__*/newSymbol("isMobXReactObserver");
+    var mobxIsUnmounted = /*#__PURE__*/newSymbol("isUnmounted");
+    var skipRenderKey = /*#__PURE__*/newSymbol("skipRender");
+    var isForcingUpdateKey = /*#__PURE__*/newSymbol("isForcingUpdate");
+    function makeClassComponentObserver(componentClass) {
+      var target = componentClass.prototype;
+
+      if (componentClass[mobxObserverProperty]) {
+        var displayName = getDisplayName(target);
+        console.warn("The provided component class (" + displayName + ") \n                has already been declared as an observer component.");
+      } else {
+        componentClass[mobxObserverProperty] = true;
+      }
+
+      if (target.componentWillReact) throw new Error("The componentWillReact life-cycle event is no longer supported");
+
+      if (componentClass["__proto__"] !== React.PureComponent) {
+        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU;else if (target.shouldComponentUpdate !== observerSCU) // n.b. unequal check, instead of existence check, as @observer might be on superclass as well
+          throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.");
+      } // this.props and this.state are made observable, just to make sure @computed fields that
+      // are defined inside the component, and which rely on state or props, re-compute if state or props change
+      // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)
+      // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+
+
+
+      makeObservableProp(target, "props");
+      makeObservableProp(target, "state");
+      var baseRender = target.render;
+
+      if (typeof baseRender !== 'function') {
+        var _displayName = getDisplayName(target);
+
+        throw new Error("[mobx-react] class component (" + _displayName + ") is missing `render` method." + "\n`observer` requires `render` being a function defined on prototype." + "\n`render = () => {}` or `render = function() {}` is not supported.");
+      }
+
+      target.render = function () {
+        return makeComponentReactive.call(this, baseRender);
+      };
+
+      patch(target, "componentWillUnmount", function () {
+        var _this$render$mobxAdmi;
+
+        if (mobxReactLite.isUsingStaticRendering() === true) return;
+        (_this$render$mobxAdmi = this.render[mobxAdminProperty]) == null ? void 0 : _this$render$mobxAdmi.dispose();
+        this[mobxIsUnmounted] = true;
+
+        if (!this.render[mobxAdminProperty]) {
+          // Render may have been hot-swapped and/or overriden by a subclass.
+          var _displayName2 = getDisplayName(this);
+
+          console.warn("The reactive render of an observer class component (" + _displayName2 + ") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.");
+        }
+      });
+      return componentClass;
+    } // Generates a friendly name for debugging
+
+    function getDisplayName(comp) {
+      return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || "<component>";
+    }
+
+    function makeComponentReactive(render) {
+      var _this = this;
+
+      if (mobxReactLite.isUsingStaticRendering() === true) return render.call(this);
+      /**
+       * If props are shallowly modified, react will render anyway,
+       * so atom.reportChanged() should not result in yet another re-render
+       */
+
+      setHiddenProp(this, skipRenderKey, false);
+      /**
+       * forceUpdate will re-assign this.props. We don't want that to cause a loop,
+       * so detect these changes
+       */
+
+      setHiddenProp(this, isForcingUpdateKey, false);
+      var initialName = getDisplayName(this);
+      var baseRender = render.bind(this);
+      var isRenderingPending = false;
+      var reaction = new mobx.Reaction(initialName + ".render()", function () {
+        if (!isRenderingPending) {
+          // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)
+          // This unidiomatic React usage but React will correctly warn about this so we continue as usual
+          // See #85 / Pull #44
+          isRenderingPending = true;
+
+          if (_this[mobxIsUnmounted] !== true) {
+            var hasError = true;
+
+            try {
+              setHiddenProp(_this, isForcingUpdateKey, true);
+              if (!_this[skipRenderKey]) React.Component.prototype.forceUpdate.call(_this);
+              hasError = false;
+            } finally {
+              setHiddenProp(_this, isForcingUpdateKey, false);
+              if (hasError) reaction.dispose();
+            }
+          }
+        }
+      });
+      reaction["reactComponent"] = this;
+      reactiveRender[mobxAdminProperty] = reaction;
+      this.render = reactiveRender;
+
+      function reactiveRender() {
+        isRenderingPending = false;
+        var exception = undefined;
+        var rendering = undefined;
+        reaction.track(function () {
+          try {
+            rendering = mobx._allowStateChanges(false, baseRender);
+          } catch (e) {
+            exception = e;
+          }
+        });
+
+        if (exception) {
+          throw exception;
+        }
+
+        return rendering;
+      }
+
+      return reactiveRender.call(this);
+    }
+
+    function observerSCU(nextProps, nextState) {
+      if (mobxReactLite.isUsingStaticRendering()) {
+        console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.");
+      } // update on any state changes (as is the default)
+
+
+      if (this.state !== nextState) {
+        return true;
+      } // update if props are shallowly not equal, inspired by PureRenderMixin
+      // we could return just 'false' here, and avoid the `skipRender` checks etc
+      // however, it is nicer if lifecycle events are triggered like usually,
+      // so we return true here if props are shallowly modified.
+
+
+      return !shallowEqual(this.props, nextProps);
+    }
+
+    function makeObservableProp(target, propName) {
+      var valueHolderKey = newSymbol("reactProp_" + propName + "_valueHolder");
+      var atomHolderKey = newSymbol("reactProp_" + propName + "_atomHolder");
+
+      function getAtom() {
+        if (!this[atomHolderKey]) {
+          setHiddenProp(this, atomHolderKey, mobx.createAtom("reactive " + propName));
+        }
+
+        return this[atomHolderKey];
+      }
+
+      Object.defineProperty(target, propName, {
+        configurable: true,
+        enumerable: true,
+        get: function get() {
+          var prevReadState = false;
+
+          if (mobx._allowStateReadsStart && mobx._allowStateReadsEnd) {
+            prevReadState = mobx._allowStateReadsStart(true);
+          }
+
+          getAtom.call(this).reportObserved();
+
+          if (mobx._allowStateReadsStart && mobx._allowStateReadsEnd) {
+            mobx._allowStateReadsEnd(prevReadState);
+          }
+
+          return this[valueHolderKey];
+        },
+        set: function set(v) {
+          if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {
+            setHiddenProp(this, valueHolderKey, v);
+            setHiddenProp(this, skipRenderKey, true);
+            getAtom.call(this).reportChanged();
+            setHiddenProp(this, skipRenderKey, false);
+          } else {
+            setHiddenProp(this, valueHolderKey, v);
+          }
+        }
+      });
+    }
+
+    var hasSymbol = typeof Symbol === "function" && Symbol["for"]; // Using react-is had some issues (and operates on elements, not on types), see #608 / #609
+
+    var ReactForwardRefSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.forward_ref") : typeof React.forwardRef === "function" && /*#__PURE__*/React.forwardRef(function (props) {
+      return null;
+    })["$$typeof"];
+    var ReactMemoSymbol = hasSymbol ? /*#__PURE__*/Symbol["for"]("react.memo") : typeof React.memo === "function" && /*#__PURE__*/React.memo(function (props) {
+      return null;
+    })["$$typeof"];
+    /**
+     * Observer function / decorator
+     */
+
+    function observer(component) {
+      if (component["isMobxInjector"] === true) {
+        console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'");
+      }
+
+      if (ReactMemoSymbol && component["$$typeof"] === ReactMemoSymbol) {
+        throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");
+      } // Unwrap forward refs into `<Observer>` component
+      // we need to unwrap the render, because it is the inner render that needs to be tracked,
+      // not the ForwardRef HoC
+
+
+      if (ReactForwardRefSymbol && component["$$typeof"] === ReactForwardRefSymbol) {
+        var baseRender = component["render"];
+        if (typeof baseRender !== "function") throw new Error("render property of ForwardRef was not a function");
+        return React.forwardRef(function ObserverForwardRef() {
+          var args = arguments;
+          return React.createElement(mobxReactLite.Observer, null, function () {
+            return baseRender.apply(undefined, args);
+          });
+        });
+      } // Function component
+
+
+      if (typeof component === "function" && (!component.prototype || !component.prototype.render) && !component["isReactClass"] && !Object.prototype.isPrototypeOf.call(React.Component, component)) {
+        return mobxReactLite.observer(component);
+      }
+
+      return makeClassComponentObserver(component);
+    }
+
+    function _extends() {
+      _extends = Object.assign || function (target) {
+        for (var i = 1; i < arguments.length; i++) {
+          var source = arguments[i];
+
+          for (var key in source) {
+            if (Object.prototype.hasOwnProperty.call(source, key)) {
+              target[key] = source[key];
+            }
+          }
+        }
+
+        return target;
+      };
+
+      return _extends.apply(this, arguments);
+    }
+
+    function _objectWithoutPropertiesLoose(source, excluded) {
+      if (source == null) return {};
+      var target = {};
+      var sourceKeys = Object.keys(source);
+      var key, i;
+
+      for (i = 0; i < sourceKeys.length; i++) {
+        key = sourceKeys[i];
+        if (excluded.indexOf(key) >= 0) continue;
+        target[key] = source[key];
+      }
+
+      return target;
+    }
+
+    var MobXProviderContext = /*#__PURE__*/React__default.createContext({});
+    function Provider(props) {
+      var children = props.children,
+          stores = _objectWithoutPropertiesLoose(props, ["children"]);
+
+      var parentValue = React__default.useContext(MobXProviderContext);
+      var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));
+      var value = mutableProviderRef.current;
+
+      {
+        var newValue = _extends({}, value, stores); // spread in previous state for the context based stores
+
+
+        if (!shallowEqual(value, newValue)) {
+          throw new Error("MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.");
+        }
+      }
+
+      return React__default.createElement(MobXProviderContext.Provider, {
+        value: value
+      }, children);
+    }
+    Provider.displayName = "MobXProvider";
+
+    /**
+     * Store Injection
+     */
+
+    function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {
+      // Support forward refs
+      var Injector = React__default.forwardRef(function (props, ref) {
+        var newProps = _extends({}, props);
+
+        var context = React__default.useContext(MobXProviderContext);
+        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});
+
+        if (ref) {
+          newProps.ref = ref;
+        }
+
+        return React__default.createElement(component, newProps);
+      });
+      if (makeReactive) Injector = observer(Injector);
+      Injector["isMobxInjector"] = true; // assigned late to suppress observer warning
+      // Static fields from component should be visible on the generated Injector
+
+      copyStaticProperties(component, Injector);
+      Injector["wrappedComponent"] = component;
+      Injector.displayName = getInjectName(component, injectNames);
+      return Injector;
+    }
+
+    function getInjectName(component, injectNames) {
+      var displayName;
+      var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component";
+      if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")";
+      return displayName;
+    }
+
+    function grabStoresByName(storeNames) {
+      return function (baseStores, nextProps) {
+        storeNames.forEach(function (storeName) {
+          if (storeName in nextProps // prefer props over stores
+          ) return;
+          if (!(storeName in baseStores)) throw new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider");
+          nextProps[storeName] = baseStores[storeName];
+        });
+        return nextProps;
+      };
+    }
+    /**
+     * higher order component that injects stores to a child.
+     * takes either a varargs list of strings, which are stores read from the context,
+     * or a function that manually maps the available stores from the context to props:
+     * storesToProps(mobxStores, props, context) => newProps
+     */
+
+
+    function inject() {
+      for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {
+        storeNames[_key] = arguments[_key];
+      }
+
+      if (typeof arguments[0] === "function") {
+        var grabStoresFn = arguments[0];
+        return function (componentClass) {
+          return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);
+        };
+      } else {
+        return function (componentClass) {
+          return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false);
+        };
+      }
+    }
+
+    var protoStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountProto");
+    var instStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountInst");
+
+    function runDisposersOnWillUnmount() {
+      var _this = this;
+      [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {
+        var prop = typeof propKeyOrFunction === "string" ? _this[propKeyOrFunction] : propKeyOrFunction;
+
+        if (prop !== undefined && prop !== null) {
+          if (Array.isArray(prop)) prop.map(function (f) {
+            return f();
+          });else prop();
+        }
+      });
+    }
+
+    function disposeOnUnmount(target, propertyKeyOrFunction) {
+      if (Array.isArray(propertyKeyOrFunction)) {
+        return propertyKeyOrFunction.map(function (fn) {
+          return disposeOnUnmount(target, fn);
+        });
+      }
+
+      var c = Object.getPrototypeOf(target).constructor;
+      var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader
+
+      var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));
+
+      if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {
+        throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");
+      }
+
+      if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function" && !Array.isArray(propertyKeyOrFunction)) {
+        throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");
+      } // decorator's target is the prototype, so it doesn't have any instance properties like props
+
+
+      var isDecorator = typeof propertyKeyOrFunction === "string"; // add property key / function we want run (disposed) to the store
+
+      var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];
+      var store = isDecorator ? // decorators are added to the prototype store
+      target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store
+      target[instStoreKey] || (target[instStoreKey] = []);
+      store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already
+
+      if (!componentWasAlreadyModified) {
+        patch(target, "componentWillUnmount", runDisposersOnWillUnmount);
+      } // return the disposer as is if invoked as a non decorator
+
+
+      if (typeof propertyKeyOrFunction !== "string") {
+        return propertyKeyOrFunction;
+      }
+    }
+
+    function createChainableTypeChecker(validator) {
+      function checkType(isRequired, props, propName, componentName, location, propFullName) {
+        for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {
+          rest[_key - 6] = arguments[_key];
+        }
+
+        return mobx.untracked(function () {
+          componentName = componentName || "<<anonymous>>";
+          propFullName = propFullName || propName;
+
+          if (props[propName] == null) {
+            if (isRequired) {
+              var actual = props[propName] === null ? "null" : "undefined";
+              return new Error("The " + location + " `" + propFullName + "` is marked as required " + "in `" + componentName + "`, but its value is `" + actual + "`.");
+            }
+
+            return null;
+          } else {
+            // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise
+            return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));
+          }
+        });
+      }
+
+      var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable
+
+      chainedCheckType.isRequired = checkType.bind(null, true);
+      return chainedCheckType;
+    } // Copied from React.PropTypes
+
+
+    function isSymbol(propType, propValue) {
+      // Native Symbol.
+      if (propType === "symbol") {
+        return true;
+      } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+
+
+      if (propValue["@@toStringTag"] === "Symbol") {
+        return true;
+      } // Fallback for non-spec compliant Symbols which are polyfilled.
+
+
+      if (typeof Symbol === "function" && propValue instanceof Symbol) {
+        return true;
+      }
+
+      return false;
+    } // Copied from React.PropTypes
+
+
+    function getPropType(propValue) {
+      var propType = typeof propValue;
+
+      if (Array.isArray(propValue)) {
+        return "array";
+      }
+
+      if (propValue instanceof RegExp) {
+        // Old webkits (at least until Android 4.0) return 'function' rather than
+        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+        // passes PropTypes.object.
+        return "object";
+      }
+
+      if (isSymbol(propType, propValue)) {
+        return "symbol";
+      }
+
+      return propType;
+    } // This handles more types than `getPropType`. Only used for error messages.
+    // Copied from React.PropTypes
+
+
+    function getPreciseType(propValue) {
+      var propType = getPropType(propValue);
+
+      if (propType === "object") {
+        if (propValue instanceof Date) {
+          return "date";
+        } else if (propValue instanceof RegExp) {
+          return "regexp";
+        }
+      }
+
+      return propType;
+    }
+
+    function createObservableTypeCheckerCreator(allowNativeType, mobxType) {
+      return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+        return mobx.untracked(function () {
+          if (allowNativeType) {
+            if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;
+          }
+
+          var mobxChecker;
+
+          switch (mobxType) {
+            case "Array":
+              mobxChecker = mobx.isObservableArray;
+              break;
+
+            case "Object":
+              mobxChecker = mobx.isObservableObject;
+              break;
+
+            case "Map":
+              mobxChecker = mobx.isObservableMap;
+              break;
+
+            default:
+              throw new Error("Unexpected mobxType: " + mobxType);
+          }
+
+          var propValue = props[propName];
+
+          if (!mobxChecker(propValue)) {
+            var preciseType = getPreciseType(propValue);
+            var nativeTypeExpectationMessage = allowNativeType ? " or javascript `" + mobxType.toLowerCase() + "`" : "";
+            return new Error("Invalid prop `" + propFullName + "` of type `" + preciseType + "` supplied to" + " `" + componentName + "`, expected `mobx.Observable" + mobxType + "`" + nativeTypeExpectationMessage + ".");
+          }
+
+          return null;
+        });
+      });
+    }
+
+    function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {
+      return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {
+        for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {
+          rest[_key2 - 5] = arguments[_key2];
+        }
+
+        return mobx.untracked(function () {
+          if (typeof typeChecker !== "function") {
+            return new Error("Property `" + propFullName + "` of component `" + componentName + "` has " + "invalid PropType notation.");
+          } else {
+            var error = createObservableTypeCheckerCreator(allowNativeType, "Array")(props, propName, componentName, location, propFullName);
+            if (error instanceof Error) return error;
+            var propValue = props[propName];
+
+            for (var i = 0; i < propValue.length; i++) {
+              error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + "[" + i + "]"].concat(rest));
+              if (error instanceof Error) return error;
+            }
+
+            return null;
+          }
+        });
+      });
+    }
+
+    var observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Array");
+    var observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);
+    var observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Map");
+    var observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Object");
+    var arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Array");
+    var arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);
+    var objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Object");
+    var PropTypes = {
+      observableArray: observableArray,
+      observableArrayOf: observableArrayOf,
+      observableMap: observableMap,
+      observableObject: observableObject,
+      arrayOrObservableArray: arrayOrObservableArray,
+      arrayOrObservableArrayOf: arrayOrObservableArrayOf,
+      objectOrObservableObject: objectOrObservableObject
+    };
+
+    if (!React.Component) throw new Error("mobx-react requires React to be available");
+    if (!mobx.observable) throw new Error("mobx-react requires mobx to be available");
+
+    Object.defineProperty(exports, 'Observer', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.Observer;
+        }
+    });
+    Object.defineProperty(exports, 'enableStaticRendering', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.enableStaticRendering;
+        }
+    });
+    Object.defineProperty(exports, 'isUsingStaticRendering', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.isUsingStaticRendering;
+        }
+    });
+    Object.defineProperty(exports, 'observerBatching', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.observerBatching;
+        }
+    });
+    Object.defineProperty(exports, 'useAsObservableSource', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.useAsObservableSource;
+        }
+    });
+    Object.defineProperty(exports, 'useLocalObservable', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.useLocalObservable;
+        }
+    });
+    Object.defineProperty(exports, 'useLocalStore', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.useLocalStore;
+        }
+    });
+    Object.defineProperty(exports, 'useObserver', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.useObserver;
+        }
+    });
+    Object.defineProperty(exports, 'useStaticRendering', {
+        enumerable: true,
+        get: function () {
+            return mobxReactLite.useStaticRendering;
+        }
+    });
+    exports.MobXProviderContext = MobXProviderContext;
+    exports.PropTypes = PropTypes;
+    exports.Provider = Provider;
+    exports.disposeOnUnmount = disposeOnUnmount;
+    exports.inject = inject;
+    exports.observer = observer;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=mobxreact.umd.development.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.umd.development.js.map b/node_modules/mobx-react/dist/mobxreact.umd.development.js.map
new file mode 100644
index 0000000..f1cfdac
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.umd.development.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.umd.development.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createSymbol","name","Symbol","symbol","createdSymbols","newSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","copyStaticProperties","base","target","protoProps","getOwnPropertyNames","getPrototypeOf","forEach","key","indexOf","defineProperty","getOwnPropertyDescriptor","setHiddenProp","prop","value","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","getMixins","methodName","methodMixins","locks","methods","wrapper","realMethod","args","retVal","undefined","apply","mx","wrapFunction","fn","patch","mixinMethod","push","oldDefinition","originalMethod","newDefinition","createDefinition","wrappedFunc","get","set","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","ObserverForwardRef","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","newValue","createStoreInjector","grabStoresFn","injectNames","makeReactive","Injector","forwardRef","ref","newProps","context","assign","createElement","getInjectName","componentName","grabStoresByName","storeNames","baseStores","storeName","inject","join","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","disposeOnUnmount","propertyKeyOrFunction","c","c2","c3","isDecorator","componentWasAlreadyModified","store","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","actual","chainedCheckType","isSymbol","propType","propValue","getPropType","RegExp","getPreciseType","Date","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","PropTypes","observable"],"mappings":";;;;;;;;IAAA,IAAIA,QAAQ,GAAG,CAAf;;IACA,SAASC,YAAT,CAAsBC,IAAtB;IACI,MAAI,OAAOC,MAAP,KAAkB,UAAtB,EAAkC;IAC9B,WAAOA,MAAM,CAACD,IAAD,CAAb;IACH;;IACD,MAAME,MAAM,sBAAoBF,IAApB,UAA6BF,QAA7B,MAAZ;IACAA,EAAAA,QAAQ;IACR,SAAOI,MAAP;IACH;;IAED,IAAMC,cAAc,GAAG,EAAvB;aACgBC,UAAUJ;IACtB,MAAI,CAACG,cAAc,CAACH,IAAD,CAAnB,EAA2B;IACvBG,IAAAA,cAAc,CAACH,IAAD,CAAd,GAAuBD,YAAY,CAACC,IAAD,CAAnC;IACH;;IACD,SAAOG,cAAc,CAACH,IAAD,CAArB;IACH;aAEeK,aAAaC,MAAWC;IACpC;IACA,MAAIC,EAAE,CAACF,IAAD,EAAOC,IAAP,CAAN,EAAoB,OAAO,IAAP;;IACpB,MAAI,OAAOD,IAAP,KAAgB,QAAhB,IAA4BA,IAAI,KAAK,IAArC,IAA6C,OAAOC,IAAP,KAAgB,QAA7D,IAAyEA,IAAI,KAAK,IAAtF,EAA4F;IACxF,WAAO,KAAP;IACH;;IACD,MAAME,KAAK,GAAGC,MAAM,CAACC,IAAP,CAAYL,IAAZ,CAAd;IACA,MAAMM,KAAK,GAAGF,MAAM,CAACC,IAAP,CAAYJ,IAAZ,CAAd;IACA,MAAIE,KAAK,CAACI,MAAN,KAAiBD,KAAK,CAACC,MAA3B,EAAmC,OAAO,KAAP;;IACnC,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,KAAK,CAACI,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;IACnC,QAAI,CAACJ,MAAM,CAACK,cAAP,CAAsBC,IAAtB,CAA2BT,IAA3B,EAAiCE,KAAK,CAACK,CAAD,CAAtC,CAAD,IAA+C,CAACN,EAAE,CAACF,IAAI,CAACG,KAAK,CAACK,CAAD,CAAN,CAAL,EAAiBP,IAAI,CAACE,KAAK,CAACK,CAAD,CAAN,CAArB,CAAtD,EAAwF;IACpF,aAAO,KAAP;IACH;IACJ;;IACD,SAAO,IAAP;IACH;;IAED,SAASN,EAAT,CAAYS,CAAZ,EAAoBC,CAApB;IACI;IACA,MAAID,CAAC,KAAKC,CAAV,EAAa;IACT,WAAOD,CAAC,KAAK,CAAN,IAAW,IAAIA,CAAJ,KAAU,IAAIC,CAAhC;IACH,GAFD,MAEO;IACH,WAAOD,CAAC,KAAKA,CAAN,IAAWC,CAAC,KAAKA,CAAxB;IACH;IACJ;;;IAGD,IAAMC,cAAc,GAAG;IACnBC,EAAAA,QAAQ,EAAE,CADS;IAEnBC,EAAAA,MAAM,EAAE,CAFW;IAGnBC,EAAAA,OAAO,EAAE,CAHU;IAInBC,EAAAA,IAAI,EAAE,CAJa;IAKnBC,EAAAA,iBAAiB,EAAE,CALA;IAMnBC,EAAAA,WAAW,EAAE,CANM;IAOnBC,EAAAA,YAAY,EAAE,CAPK;IAQnBC,EAAAA,YAAY,EAAE,CARK;IASnBC,EAAAA,eAAe,EAAE,CATE;IAUnBC,EAAAA,wBAAwB,EAAE,CAVP;IAWnBC,EAAAA,wBAAwB,EAAE,CAXP;IAYnBC,EAAAA,MAAM,EAAE,CAZW;IAanBC,EAAAA,WAAW,EAAE,CAbM;IAcnBC,EAAAA,SAAS,EAAE;IAdQ,CAAvB;aAiBgBC,qBAAqBC,MAAcC;IAC/C,MAAMC,UAAU,GAAG3B,MAAM,CAAC4B,mBAAP,CAA2B5B,MAAM,CAAC6B,cAAP,CAAsBJ,IAAtB,CAA3B,CAAnB;IACAzB,EAAAA,MAAM,CAAC4B,mBAAP,CAA2BH,IAA3B,EAAiCK,OAAjC,CAAyC,UAAAC,GAAG;IACxC,QAAI,CAACtB,cAAc,CAACsB,GAAD,CAAf,IAAwBJ,UAAU,CAACK,OAAX,CAAmBD,GAAnB,MAA4B,CAAC,CAAzD,EAA4D;IACxD/B,MAAAA,MAAM,CAACiC,cAAP,CAAsBP,MAAtB,EAA8BK,GAA9B,EAAmC/B,MAAM,CAACkC,wBAAP,CAAgCT,IAAhC,EAAsCM,GAAtC,CAAnC;IACH;IACJ,GAJD;IAKH;IAED;;;;;;;aAMgBI,cAAcT,QAAgBU,MAAWC;IACrD,MAAI,CAACrC,MAAM,CAACK,cAAP,CAAsBC,IAAtB,CAA2BoB,MAA3B,EAAmCU,IAAnC,CAAL,EAA+C;IAC3CpC,IAAAA,MAAM,CAACiC,cAAP,CAAsBP,MAAtB,EAA8BU,IAA9B,EAAoC;IAChCE,MAAAA,UAAU,EAAE,KADoB;IAEhCC,MAAAA,YAAY,EAAE,IAFkB;IAGhCC,MAAAA,QAAQ,EAAE,IAHsB;IAIhCH,MAAAA,KAAK,EAALA;IAJgC,KAApC;IAMH,GAPD,MAOO;IACHX,IAAAA,MAAM,CAACU,IAAD,CAAN,GAAeC,KAAf;IACH;IACJ;IAED;;;;;IAIA,IAAMI,UAAU,gBAAG/C,SAAS,CAAC,aAAD,CAA5B;IACA,IAAMgD,qBAAqB,gBAAGhD,SAAS,CAAC,mBAAD,CAAvC;;IAOA,SAASiD,SAAT,CAAmBjB,MAAnB,EAAmCkB,UAAnC;IACI,MAAMvB,MAAM,GAAIK,MAAM,CAACe,UAAD,CAAN,GAAqBf,MAAM,CAACe,UAAD,CAAN,IAAsB,EAA3D;IACA,MAAMI,YAAY,GAAIxB,MAAM,CAACuB,UAAD,CAAN,GAAqBvB,MAAM,CAACuB,UAAD,CAAN,IAAsB,EAAjE;IACAC,EAAAA,YAAY,CAACC,KAAb,GAAqBD,YAAY,CAACC,KAAb,IAAsB,CAA3C;IACAD,EAAAA,YAAY,CAACE,OAAb,GAAuBF,YAAY,CAACE,OAAb,IAAwB,EAA/C;IACA,SAAOF,YAAP;IACH;;IAED,SAASG,OAAT,CAAiBC,UAAjB,EAAuC5B,MAAvC;;;wCAA0D6B;IAAAA,IAAAA;;;IACtD;IACA7B,EAAAA,MAAM,CAACyB,KAAP;;IAEA,MAAI;IACA,QAAIK,MAAJ;;IACA,QAAIF,UAAU,KAAKG,SAAf,IAA4BH,UAAU,KAAK,IAA/C,EAAqD;IACjDE,MAAAA,MAAM,GAAGF,UAAU,CAACI,KAAX,CAAiB,IAAjB,EAAuBH,IAAvB,CAAT;IACH;;IAED,WAAOC,MAAP;IACH,GAPD,SAOU;IACN9B,IAAAA,MAAM,CAACyB,KAAP;;IACA,QAAIzB,MAAM,CAACyB,KAAP,KAAiB,CAArB,EAAwB;IACpBzB,MAAAA,MAAM,CAAC0B,OAAP,CAAejB,OAAf,CAAuB,UAAAwB,EAAE;IACrBA,QAAAA,EAAE,CAACD,KAAH,CAAS,KAAT,EAAeH,IAAf;IACH,OAFD;IAGH;IACJ;IACJ;;IAED,SAASK,YAAT,CAAsBN,UAAtB,EAA4C5B,MAA5C;IACI,MAAMmC,EAAE,GAAG,SAALA,EAAK;2CAAaN;IAAAA,MAAAA;;;IACpBF,IAAAA,OAAO,CAAC1C,IAAR,OAAA0C,OAAO,GAAM,IAAN,EAAYC,UAAZ,EAAwB5B,MAAxB,SAAmC6B,IAAnC,EAAP;IACH,GAFD;;IAGA,SAAOM,EAAP;IACH;;aAEeC,MAAM/B,QAAgBkB,YAAoBc;IACtD,MAAMrC,MAAM,GAAGsB,SAAS,CAACjB,MAAD,EAASkB,UAAT,CAAxB;;IAEA,MAAIvB,MAAM,CAAC0B,OAAP,CAAef,OAAf,CAAuB0B,WAAvB,IAAsC,CAA1C,EAA6C;IACzCrC,IAAAA,MAAM,CAAC0B,OAAP,CAAeY,IAAf,CAAoBD,WAApB;IACH;;IAED,MAAME,aAAa,GAAG5D,MAAM,CAACkC,wBAAP,CAAgCR,MAAhC,EAAwCkB,UAAxC,CAAtB;;IACA,MAAIgB,aAAa,IAAIA,aAAa,CAAClB,qBAAD,CAAlC,EAA2D;IACvD;IACA;IACH;;IAED,MAAMmB,cAAc,GAAGnC,MAAM,CAACkB,UAAD,CAA7B;IACA,MAAMkB,aAAa,GAAGC,gBAAgB,CAClCrC,MADkC,EAElCkB,UAFkC,EAGlCgB,aAAa,GAAGA,aAAa,CAACtB,UAAjB,GAA8Bc,SAHT,EAIlC/B,MAJkC,EAKlCwC,cALkC,CAAtC;IAQA7D,EAAAA,MAAM,CAACiC,cAAP,CAAsBP,MAAtB,EAA8BkB,UAA9B,EAA0CkB,aAA1C;IACH;;IAED,SAASC,gBAAT,CACIrC,MADJ,EAEIkB,UAFJ,EAGIN,UAHJ,EAIIjB,MAJJ,EAKIwC,cALJ;;;IAOI,MAAIG,WAAW,GAAGT,YAAY,CAACM,cAAD,EAAiBxC,MAAjB,CAA9B;IAEA,yBACKqB,qBADL,IAC6B,IAD7B,OAEIuB,GAFJ,GAES;IACD,WAAOD,WAAP;IACH,GAJL,OAKIE,GALJ,GAKS,aAAU7B,KAAV;IACD,QAAI,SAASX,MAAb,EAAqB;IACjBsC,MAAAA,WAAW,GAAGT,YAAY,CAAClB,KAAD,EAAQhB,MAAR,CAA1B;IACH,KAFD,MAEO;IACH;IACA;IACA;IACA;IACA,UAAMyC,aAAa,GAAGC,gBAAgB,CAAC,IAAD,EAAOnB,UAAP,EAAmBN,UAAnB,EAA+BjB,MAA/B,EAAuCgB,KAAvC,CAAtC;IACArC,MAAAA,MAAM,CAACiC,cAAP,CAAsB,IAAtB,EAA4BW,UAA5B,EAAwCkB,aAAxC;IACH;IACJ,GAhBL,OAiBIvB,YAjBJ,GAiBkB,IAjBlB,OAkBID,UAlBJ,GAkBgBA,UAlBhB;IAoBH;;ICnLD,IAAM6B,iBAAiB,GAAGC,UAAK,IAAI,OAAnC;IACA,IAAMC,oBAAoB,gBAAG3E,SAAS,CAAC,qBAAD,CAAtC;IACA,IAAM4E,eAAe,gBAAG5E,SAAS,CAAC,aAAD,CAAjC;IACA,IAAM6E,aAAa,gBAAG7E,SAAS,CAAC,YAAD,CAA/B;IACA,IAAM8E,kBAAkB,gBAAG9E,SAAS,CAAC,iBAAD,CAApC;AAEA,aAAgB+E,2BACZC;IAEA,MAAMhD,MAAM,GAAGgD,cAAc,CAACC,SAA9B;;IAEA,MAAID,cAAc,CAACL,oBAAD,CAAlB,EAA0C;IACtC,QAAM/C,WAAW,GAAGsD,cAAc,CAAClD,MAAD,CAAlC;IACAmD,IAAAA,OAAO,CAACC,IAAR,oCACqCxD,WADrC;IAIH,GAND,MAMO;IACHoD,IAAAA,cAAc,CAACL,oBAAD,CAAd,GAAuC,IAAvC;IACH;;IAED,MAAI3C,MAAM,CAACqD,kBAAX,EACI,MAAM,IAAIC,KAAJ,CAAU,gEAAV,CAAN;;IACJ,MAAIN,cAAc,CAAC,WAAD,CAAd,KAAgCO,mBAApC,EAAmD;IAC/C,QAAI,CAACvD,MAAM,CAACwD,qBAAZ,EAAmCxD,MAAM,CAACwD,qBAAP,GAA+BC,WAA/B,CAAnC,KACK,IAAIzD,MAAM,CAACwD,qBAAP,KAAiCC,WAArC;IAED,YAAM,IAAIH,KAAJ,CACF,8EADE,CAAN;IAGP;IAGD;IACA;IACA;;;IACAI,EAAAA,kBAAkB,CAAC1D,MAAD,EAAS,OAAT,CAAlB;IACA0D,EAAAA,kBAAkB,CAAC1D,MAAD,EAAS,OAAT,CAAlB;IAEA,MAAM2D,UAAU,GAAG3D,MAAM,CAACf,MAA1B;;IACA,MAAI,OAAO0E,UAAP,KAAsB,UAA1B,EAAsC;IAClC,QAAM/D,YAAW,GAAGsD,cAAc,CAAClD,MAAD,CAAlC;;IACA,UAAM,IAAIsD,KAAJ,CACF,mCAAiC1D,YAAjC,oLADE,CAAN;IAKH;;IACDI,EAAAA,MAAM,CAACf,MAAP,GAAgB;IACZ,WAAO2E,qBAAqB,CAAChF,IAAtB,CAA2B,IAA3B,EAAiC+E,UAAjC,CAAP;IACH,GAFD;;IAGA5B,EAAAA,KAAK,CAAC/B,MAAD,EAAS,sBAAT,EAAiC;;;IAClC,QAAI6D,oCAAsB,OAAO,IAAjC,EAAuC;IACvC,kCAAK5E,MAAL,CAAYwD,iBAAZ,4CAAgCqB,OAAhC;IACA,SAAKlB,eAAL,IAAwB,IAAxB;;IAEA,QAAI,CAAC,KAAK3D,MAAL,CAAYwD,iBAAZ,CAAL,EAAqC;IACjC;IACA,UAAM7C,aAAW,GAAGsD,cAAc,CAAC,IAAD,CAAlC;;IACAC,MAAAA,OAAO,CAACC,IAAR,0DAC2DxD,aAD3D;IAKH;IACJ,GAdI,CAAL;IAeA,SAAOoD,cAAP;IACH;;IAGD,SAASE,cAAT,CAAwBa,IAAxB;IACI,SACIA,IAAI,CAACnE,WAAL,IACAmE,IAAI,CAACnG,IADL,IAECmG,IAAI,CAACC,WAAL,KAAqBD,IAAI,CAACC,WAAL,CAAiBpE,WAAjB,IAAgCmE,IAAI,CAACC,WAAL,CAAiBpG,IAAtE,CAFD,IAGA,aAJJ;IAMH;;IAED,SAASgG,qBAAT,CAA+B3E,MAA/B;;;IACI,MAAI4E,oCAAsB,OAAO,IAAjC,EAAuC,OAAO5E,MAAM,CAACL,IAAP,CAAY,IAAZ,CAAP;IAEvC;;;;;IAIA6B,EAAAA,aAAa,CAAC,IAAD,EAAOoC,aAAP,EAAsB,KAAtB,CAAb;IACA;;;;;IAIApC,EAAAA,aAAa,CAAC,IAAD,EAAOqC,kBAAP,EAA2B,KAA3B,CAAb;IAEA,MAAMmB,WAAW,GAAGf,cAAc,CAAC,IAAD,CAAlC;IACA,MAAMS,UAAU,GAAG1E,MAAM,CAACiF,IAAP,CAAY,IAAZ,CAAnB;IAEA,MAAIC,kBAAkB,GAAG,KAAzB;IAEA,MAAMC,QAAQ,GAAG,IAAIC,aAAJ,CAAgBJ,WAAhB,gBAAwC;IACrD,QAAI,CAACE,kBAAL,EAAyB;IACrB;IACA;IACA;IACAA,MAAAA,kBAAkB,GAAG,IAArB;;IACA,UAAI,KAAI,CAACvB,eAAD,CAAJ,KAA0B,IAA9B,EAAoC;IAChC,YAAI0B,QAAQ,GAAG,IAAf;;IACA,YAAI;IACA7D,UAAAA,aAAa,CAAC,KAAD,EAAOqC,kBAAP,EAA2B,IAA3B,CAAb;IACA,cAAI,CAAC,KAAI,CAACD,aAAD,CAAT,EAA0B0B,eAAS,CAACtB,SAAV,CAAoBuB,WAApB,CAAgC5F,IAAhC,CAAqC,KAArC;IAC1B0F,UAAAA,QAAQ,GAAG,KAAX;IACH,SAJD,SAIU;IACN7D,UAAAA,aAAa,CAAC,KAAD,EAAOqC,kBAAP,EAA2B,KAA3B,CAAb;IACA,cAAIwB,QAAJ,EAAcF,QAAQ,CAACN,OAAT;IACjB;IACJ;IACJ;IACJ,GAlBgB,CAAjB;IAoBAM,EAAAA,QAAQ,CAAC,gBAAD,CAAR,GAA6B,IAA7B;IACAK,EAAAA,cAAc,CAAChC,iBAAD,CAAd,GAAoC2B,QAApC;IACA,OAAKnF,MAAL,GAAcwF,cAAd;;IAEA,WAASA,cAAT;IACIN,IAAAA,kBAAkB,GAAG,KAArB;IACA,QAAIO,SAAS,GAAGhD,SAAhB;IACA,QAAIiD,SAAS,GAAGjD,SAAhB;IACA0C,IAAAA,QAAQ,CAACQ,KAAT,CAAe;IACX,UAAI;IACAD,QAAAA,SAAS,GAAGE,uBAAkB,CAAC,KAAD,EAAQlB,UAAR,CAA9B;IACH,OAFD,CAEE,OAAOmB,CAAP,EAAU;IACRJ,QAAAA,SAAS,GAAGI,CAAZ;IACH;IACJ,KAND;;IAOA,QAAIJ,SAAJ,EAAe;IACX,YAAMA,SAAN;IACH;;IACD,WAAOC,SAAP;IACH;;IAED,SAAOF,cAAc,CAAC7F,IAAf,CAAoB,IAApB,CAAP;IACH;;IAED,SAAS6E,WAAT,CAAqBsB,SAArB,EAAkDC,SAAlD;IACI,MAAInB,oCAAsB,EAA1B,EAA8B;IAC1BV,IAAAA,OAAO,CAACC,IAAR,CACI,iLADJ;IAGH;;;IAED,MAAI,KAAK6B,KAAL,KAAeD,SAAnB,EAA8B;IAC1B,WAAO,IAAP;IACH;IAED;IACA;IACA;;;IACA,SAAO,CAAC/G,YAAY,CAAC,KAAKiH,KAAN,EAAaH,SAAb,CAApB;IACH;;IAED,SAASrB,kBAAT,CAA4B1D,MAA5B,EAAyCmF,QAAzC;IACI,MAAMC,cAAc,GAAGpH,SAAS,gBAAcmH,QAAd,kBAAhC;IACA,MAAME,aAAa,GAAGrH,SAAS,gBAAcmH,QAAd,iBAA/B;;IACA,WAASG,OAAT;IACI,QAAI,CAAC,KAAKD,aAAL,CAAL,EAA0B;IACtB5E,MAAAA,aAAa,CAAC,IAAD,EAAO4E,aAAP,EAAsBE,eAAU,CAAC,cAAcJ,QAAf,CAAhC,CAAb;IACH;;IACD,WAAO,KAAKE,aAAL,CAAP;IACH;;IACD/G,EAAAA,MAAM,CAACiC,cAAP,CAAsBP,MAAtB,EAA8BmF,QAA9B,EAAwC;IACpCtE,IAAAA,YAAY,EAAE,IADsB;IAEpCD,IAAAA,UAAU,EAAE,IAFwB;IAGpC2B,IAAAA,GAAG,EAAE;IACD,UAAIiD,aAAa,GAAG,KAApB;;IAEA,UAAIC,0BAAqB,IAAIC,wBAA7B,EAAkD;IAC9CF,QAAAA,aAAa,GAAGC,0BAAqB,CAAC,IAAD,CAArC;IACH;;IACDH,MAAAA,OAAO,CAAC1G,IAAR,CAAa,IAAb,EAAmB+G,cAAnB;;IAEA,UAAIF,0BAAqB,IAAIC,wBAA7B,EAAkD;IAC9CA,QAAAA,wBAAmB,CAACF,aAAD,CAAnB;IACH;;IAED,aAAO,KAAKJ,cAAL,CAAP;IACH,KAhBmC;IAiBpC5C,IAAAA,GAAG,EAAE,SAASA,GAAT,CAAaoD,CAAb;IACD,UAAI,CAAC,KAAK9C,kBAAL,CAAD,IAA6B,CAAC7E,YAAY,CAAC,KAAKmH,cAAL,CAAD,EAAuBQ,CAAvB,CAA9C,EAAyE;IACrEnF,QAAAA,aAAa,CAAC,IAAD,EAAO2E,cAAP,EAAuBQ,CAAvB,CAAb;IACAnF,QAAAA,aAAa,CAAC,IAAD,EAAOoC,aAAP,EAAsB,IAAtB,CAAb;IACAyC,QAAAA,OAAO,CAAC1G,IAAR,CAAa,IAAb,EAAmBiH,aAAnB;IACApF,QAAAA,aAAa,CAAC,IAAD,EAAOoC,aAAP,EAAsB,KAAtB,CAAb;IACH,OALD,MAKO;IACHpC,QAAAA,aAAa,CAAC,IAAD,EAAO2E,cAAP,EAAuBQ,CAAvB,CAAb;IACH;IACJ;IA1BmC,GAAxC;IA4BH;;IC3MD,IAAME,SAAS,GAAG,OAAOjI,MAAP,KAAkB,UAAlB,IAAgCA,MAAM,OAAxD;;IAGA,IAAMkI,qBAAqB,GAAGD,SAAS,gBACjCjI,MAAM,OAAN,CAAW,mBAAX,CADiC,GAEjC,OAAOmI,gBAAP,KAA4B,UAA5B,iBAA0CA,gBAAA,CAAiB,UAACd,KAAD;IAAA,SAAgB,IAAhB;IAAA,CAAjB,EAAuC,UAAvC,CAFhD;IAIA,IAAMe,eAAe,GAAGH,SAAS,gBAC3BjI,MAAM,OAAN,CAAW,YAAX,CAD2B,GAE3B,OAAOmI,UAAP,KAAsB,UAAtB,iBAAoCA,UAAA,CAAW,UAACd,KAAD;IAAA,SAAgB,IAAhB;IAAA,CAAX,EAAiC,UAAjC,CAF1C;IAIA;;;;AAGA,aAAgBgB,SAAoCC;IAChD,MAAIA,SAAS,CAAC,gBAAD,CAAT,KAAgC,IAApC,EAA0C;IACtChD,IAAAA,OAAO,CAACC,IAAR,CACI,4IADJ;IAGH;;IAED,MAAI6C,eAAe,IAAIE,SAAS,CAAC,UAAD,CAAT,KAA0BF,eAAjD,EAAkE;IAC9D,UAAM,IAAI3C,KAAJ,CACF,gLADE,CAAN;IAGH;IAGD;IACA;;;IACA,MAAIyC,qBAAqB,IAAII,SAAS,CAAC,UAAD,CAAT,KAA0BJ,qBAAvD,EAA8E;IAC1E,QAAMpC,UAAU,GAAGwC,SAAS,CAAC,QAAD,CAA5B;IACA,QAAI,OAAOxC,UAAP,KAAsB,UAA1B,EACI,MAAM,IAAIL,KAAJ,CAAU,kDAAV,CAAN;IACJ,WAAO0C,gBAAA,CAAiB,SAASI,kBAAT;IACpB,UAAM5E,IAAI,GAAG6E,SAAb;IACA,aAAOL,mBAAA,CAACM,sBAAD,MAAA,EAAW;IAAA,eAAM3C,UAAU,CAAChC,KAAX,CAAiBD,SAAjB,EAA4BF,IAA5B,CAAN;IAAA,OAAX,CAAP;IACH,KAHM,CAAP;IAIH;;;IAGD,MACI,OAAO2E,SAAP,KAAqB,UAArB,KACC,CAACA,SAAS,CAAClD,SAAX,IAAwB,CAACkD,SAAS,CAAClD,SAAV,CAAoBhE,MAD9C,KAEA,CAACkH,SAAS,CAAC,cAAD,CAFV,IAGA,CAAC7H,MAAM,CAAC2E,SAAP,CAAiBsD,aAAjB,CAA+B3H,IAA/B,CAAoCoH,eAApC,EAAqDG,SAArD,CAJL,EAKE;IACE,WAAOK,sBAAY,CAACL,SAAD,CAAnB;IACH;;IAED,SAAOpD,0BAA0B,CAACoD,SAAD,CAAjC;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QCrDYM,mBAAmB,gBAAGT,cAAK,CAACU,aAAN,CAA+B,EAA/B,CAA5B;AAMP,aAAgBC,SAASzB;UACb0B,WAAwB1B,MAAxB0B;UAAaC,uCAAW3B;;IAChC,MAAM4B,WAAW,GAAGd,cAAK,CAACe,UAAN,CAAiBN,mBAAjB,CAApB;IACA,MAAMO,kBAAkB,GAAGhB,cAAK,CAACiB,MAAN,cAAkBH,WAAlB,EAAkCD,MAAlC,EAA3B;IACA,MAAMlG,KAAK,GAAGqG,kBAAkB,CAACE,OAAjC;;IAEA,EAAa;IACT,QAAMC,QAAQ,gBAAQxG,KAAR,EAAkBkG,MAAlB,CAAd,CADS;;;IAET,QAAI,CAAC5I,YAAY,CAAC0C,KAAD,EAAQwG,QAAR,CAAjB,EAAoC;IAChC,YAAM,IAAI7D,KAAJ,CACF,gJADE,CAAN;IAGH;IACJ;;IAED,SAAO0C,4BAAA,CAACS,mBAAmB,CAACE,QAArB;IAA8BhG,IAAAA,KAAK,EAAEA;OAArC,EAA6CiG,QAA7C,CAAP;IACH;IAEDD,QAAQ,CAAC/G,WAAT,GAAuB,cAAvB;;ICnBA;;;;IAGA,SAASwH,mBAAT,CACIC,YADJ,EAEIlB,SAFJ,EAGImB,WAHJ,EAIIC,YAJJ;IAMI;IACA,MAAIC,QAAQ,GAAyBxB,cAAK,CAACyB,UAAN,CAAiB,UAACvC,KAAD,EAAQwC,GAAR;IAClD,QAAMC,QAAQ,gBAAQzC,KAAR,CAAd;;IACA,QAAM0C,OAAO,GAAG5B,cAAK,CAACe,UAAN,CAAiBN,mBAAjB,CAAhB;IACAnI,IAAAA,MAAM,CAACuJ,MAAP,CAAcF,QAAd,EAAwBN,YAAY,CAACO,OAAO,IAAI,EAAZ,EAAgBD,QAAhB,CAAZ,IAAyC,EAAjE;;IAEA,QAAID,GAAJ,EAAS;IACLC,MAAAA,QAAQ,CAACD,GAAT,GAAeA,GAAf;IACH;;IAED,WAAO1B,cAAK,CAAC8B,aAAN,CAAoB3B,SAApB,EAA+BwB,QAA/B,CAAP;IACH,GAVoC,CAArC;IAYA,MAAIJ,YAAJ,EAAkBC,QAAQ,GAAGtB,QAAQ,CAACsB,QAAD,CAAnB;IAClBA,EAAAA,QAAQ,CAAC,gBAAD,CAAR,GAA6B,IAA7B;IAEA;;IACA1H,EAAAA,oBAAoB,CAACqG,SAAD,EAAYqB,QAAZ,CAApB;IACAA,EAAAA,QAAQ,CAAC,kBAAD,CAAR,GAA+BrB,SAA/B;IACAqB,EAAAA,QAAQ,CAAC5H,WAAT,GAAuBmI,aAAa,CAAC5B,SAAD,EAAYmB,WAAZ,CAApC;IACA,SAAOE,QAAP;IACH;;IAED,SAASO,aAAT,CAAuB5B,SAAvB,EAAwDmB,WAAxD;IACI,MAAI1H,WAAJ;IACA,MAAMoI,aAAa,GACf7B,SAAS,CAACvG,WAAV,IACAuG,SAAS,CAACvI,IADV,IAECuI,SAAS,CAACnC,WAAV,IAAyBmC,SAAS,CAACnC,WAAV,CAAsBpG,IAFhD,IAGA,WAJJ;IAKA,MAAI0J,WAAJ,EAAiB1H,WAAW,GAAG,iBAAiB0H,WAAjB,GAA+B,GAA/B,GAAqCU,aAArC,GAAqD,GAAnE,CAAjB,KACKpI,WAAW,GAAG,YAAYoI,aAAZ,GAA4B,GAA1C;IACL,SAAOpI,WAAP;IACH;;IAED,SAASqI,gBAAT,CACIC,UADJ;IAGI,SAAO,UAAUC,UAAV,EAAsBpD,SAAtB;IACHmD,IAAAA,UAAU,CAAC9H,OAAX,CAAmB,UAAUgI,SAAV;IACf,UACIA,SAAS,IAAIrD,SADjB;IAAA,QAGI;IACJ,UAAI,EAAEqD,SAAS,IAAID,UAAf,CAAJ,EACI,MAAM,IAAI7E,KAAJ,CACF,2BACI8E,SADJ,GAEI,+DAHF,CAAN;IAKJrD,MAAAA,SAAS,CAACqD,SAAD,CAAT,GAAuBD,UAAU,CAACC,SAAD,CAAjC;IACH,KAZD;IAaA,WAAOrD,SAAP;IACH,GAfD;IAgBH;IAWD;;;;;;;;AAMA,aAAgBsD;wCAAuDH;IAAAA,IAAAA;;;IACnE,MAAI,OAAO7B,SAAS,CAAC,CAAD,CAAhB,KAAwB,UAA5B,EAAwC;IACpC,QAAIgB,YAAY,GAAGhB,SAAS,CAAC,CAAD,CAA5B;IACA,WAAO,UAACrD,cAAD;IAAA,aACHoE,mBAAmB,CAACC,YAAD,EAAerE,cAAf,EAA+BqE,YAAY,CAACzJ,IAA5C,EAAkD,IAAlD,CADhB;IAAA,KAAP;IAEH,GAJD,MAIO;IACH,WAAO,UAACoF,cAAD;IAAA,aACHoE,mBAAmB,CACfa,gBAAgB,CAACC,UAAD,CADD,EAEflF,cAFe,EAGfkF,UAAU,CAACI,IAAX,CAAgB,GAAhB,CAHe,EAIf,KAJe,CADhB;IAAA,KAAP;IAOH;IACJ;;IClGD,IAAMC,aAAa,gBAAGvK,SAAS,CAAC,uBAAD,CAA/B;IACA,IAAMwK,YAAY,gBAAGxK,SAAS,CAAC,sBAAD,CAA9B;;IAEA,SAASyK,yBAAT;;IACK,YAAK,KAAKF,aAAL,KAAuB,EAA5B,EAAqC,KAAKC,YAAL,KAAsB,EAA3D,EAAgEpI,OAAhE,CAAwE,UAAAsI,iBAAiB;IACtF,QAAMhI,IAAI,GACN,OAAOgI,iBAAP,KAA6B,QAA7B,GAAwC,KAAI,CAACA,iBAAD,CAA5C,GAAkEA,iBADtE;;IAEA,QAAIhI,IAAI,KAAKgB,SAAT,IAAsBhB,IAAI,KAAK,IAAnC,EAAyC;IACrC,UAAIiI,KAAK,CAACC,OAAN,CAAclI,IAAd,CAAJ,EAAyBA,IAAI,CAACmI,GAAL,CAAS,UAAAC,CAAC;IAAA,eAAIA,CAAC,EAAL;IAAA,OAAV,EAAzB,KACKpI,IAAI;IACZ;IACJ,GAPA;IAQJ;;AAQD,aAAgBqI,iBACZ/I,QACAgJ;IAEA,MAAIL,KAAK,CAACC,OAAN,CAAcI,qBAAd,CAAJ,EAA0C;IACtC,WAAOA,qBAAqB,CAACH,GAAtB,CAA0B,UAAA/G,EAAE;IAAA,aAAIiH,gBAAgB,CAAC/I,MAAD,EAAS8B,EAAT,CAApB;IAAA,KAA5B,CAAP;IACH;;IAED,MAAMmH,CAAC,GAAG3K,MAAM,CAAC6B,cAAP,CAAsBH,MAAtB,EAA8BgE,WAAxC;IACA,MAAMkF,EAAE,GAAG5K,MAAM,CAAC6B,cAAP,CAAsBH,MAAM,CAACgE,WAA7B,CAAX;;IAEA,MAAMmF,EAAE,GAAG7K,MAAM,CAAC6B,cAAP,CAAsB7B,MAAM,CAAC6B,cAAP,CAAsBH,MAAtB,CAAtB,CAAX;;IACA,MACI,EACIiJ,CAAC,KAAKjD,cAAK,CAACzB,SAAZ,IACA0E,CAAC,KAAKjD,cAAK,CAACzC,aADZ,IAEA2F,EAAE,KAAKlD,cAAK,CAACzB,SAFb,IAGA2E,EAAE,KAAKlD,cAAK,CAACzC,aAHb,IAIA4F,EAAE,KAAKnD,cAAK,CAACzB,SAJb,IAKA4E,EAAE,KAAKnD,cAAK,CAACzC,aANjB,CADJ,EASE;IACE,UAAM,IAAID,KAAJ,CACF,0GADE,CAAN;IAGH;;IAED,MACI,OAAO0F,qBAAP,KAAiC,QAAjC,IACA,OAAOA,qBAAP,KAAiC,UADjC,IAEA,CAACL,KAAK,CAACC,OAAN,CAAcI,qBAAd,CAHL,EAIE;IACE,UAAM,IAAI1F,KAAJ,CACF,mGADE,CAAN;IAGH;;;IAGD,MAAM8F,WAAW,GAAG,OAAOJ,qBAAP,KAAiC,QAArD;;IAGA,MAAMK,2BAA2B,GAAG,CAAC,CAACrJ,MAAM,CAACuI,aAAD,CAAR,IAA2B,CAAC,CAACvI,MAAM,CAACwI,YAAD,CAAvE;IACA,MAAMc,KAAK,GAAGF,WAAW;IAEnBpJ,EAAAA,MAAM,CAACuI,aAAD,CAAN,KAA0BvI,MAAM,CAACuI,aAAD,CAAN,GAAwB,EAAlD,CAFmB;IAInBvI,EAAAA,MAAM,CAACwI,YAAD,CAAN,KAAyBxI,MAAM,CAACwI,YAAD,CAAN,GAAuB,EAAhD,CAJN;IAMAc,EAAAA,KAAK,CAACrH,IAAN,CAAW+G,qBAAX;;IAGA,MAAI,CAACK,2BAAL,EAAkC;IAC9BtH,IAAAA,KAAK,CAAC/B,MAAD,EAAS,sBAAT,EAAiCyI,yBAAjC,CAAL;IACH;;;IAGD,MAAI,OAAOO,qBAAP,KAAiC,QAArC,EAA+C;IAC3C,WAAOA,qBAAP;IACH;IACJ;;ICjFD,SAASO,0BAAT,CAAoCC,SAApC;IACI,WAASC,SAAT,CACIC,UADJ,EAEIxE,KAFJ,EAGIC,QAHJ,EAII6C,aAJJ,EAKI2B,QALJ,EAMIC,YANJ;0CAOOC;IAAAA,MAAAA;;;IAEH,WAAOC,cAAS,CAAC;IACb9B,MAAAA,aAAa,GAAGA,aAAa,IAAI,eAAjC;IACA4B,MAAAA,YAAY,GAAGA,YAAY,IAAIzE,QAA/B;;IACA,UAAID,KAAK,CAACC,QAAD,CAAL,IAAmB,IAAvB,EAA6B;IACzB,YAAIuE,UAAJ,EAAgB;IACZ,cAAMK,MAAM,GAAG7E,KAAK,CAACC,QAAD,CAAL,KAAoB,IAApB,GAA2B,MAA3B,GAAoC,WAAnD;IACA,iBAAO,IAAI7B,KAAJ,CACH,SACIqG,QADJ,GAEI,IAFJ,GAGIC,YAHJ,GAII,0BAJJ,GAKI,MALJ,GAMI5B,aANJ,GAOI,uBAPJ,GAQI+B,MARJ,GASI,IAVD,CAAP;IAYH;;IACD,eAAO,IAAP;IACH,OAjBD,MAiBO;IACH;IACA,eAAOP,SAAS,MAAT,UAAUtE,KAAV,EAAiBC,QAAjB,EAA2B6C,aAA3B,EAA0C2B,QAA1C,EAAoDC,YAApD,SAAqEC,IAArE,EAAP;IACH;IACJ,KAxBe,CAAhB;IAyBH;;IAED,MAAMG,gBAAgB,GAAQP,SAAS,CAACvF,IAAV,CAAe,IAAf,EAAqB,KAArB,CAA9B;;IAEA8F,EAAAA,gBAAgB,CAACN,UAAjB,GAA8BD,SAAS,CAACvF,IAAV,CAAe,IAAf,EAAqB,IAArB,CAA9B;IACA,SAAO8F,gBAAP;IACH;;;IAGD,SAASC,QAAT,CAAkBC,QAAlB,EAAiCC,SAAjC;IACI;IACA,MAAID,QAAQ,KAAK,QAAjB,EAA2B;IACvB,WAAO,IAAP;IACH;;;IAGD,MAAIC,SAAS,CAAC,eAAD,CAAT,KAA+B,QAAnC,EAA6C;IACzC,WAAO,IAAP;IACH;;;IAGD,MAAI,OAAOtM,MAAP,KAAkB,UAAlB,IAAgCsM,SAAS,YAAYtM,MAAzD,EAAiE;IAC7D,WAAO,IAAP;IACH;;IAED,SAAO,KAAP;IACH;;;IAGD,SAASuM,WAAT,CAAqBD,SAArB;IACI,MAAMD,QAAQ,GAAG,OAAOC,SAAxB;;IACA,MAAIxB,KAAK,CAACC,OAAN,CAAcuB,SAAd,CAAJ,EAA8B;IAC1B,WAAO,OAAP;IACH;;IACD,MAAIA,SAAS,YAAYE,MAAzB,EAAiC;IAC7B;IACA;IACA;IACA,WAAO,QAAP;IACH;;IACD,MAAIJ,QAAQ,CAACC,QAAD,EAAWC,SAAX,CAAZ,EAAmC;IAC/B,WAAO,QAAP;IACH;;IACD,SAAOD,QAAP;IACH;IAGD;;;IACA,SAASI,cAAT,CAAwBH,SAAxB;IACI,MAAMD,QAAQ,GAAGE,WAAW,CAACD,SAAD,CAA5B;;IACA,MAAID,QAAQ,KAAK,QAAjB,EAA2B;IACvB,QAAIC,SAAS,YAAYI,IAAzB,EAA+B;IAC3B,aAAO,MAAP;IACH,KAFD,MAEO,IAAIJ,SAAS,YAAYE,MAAzB,EAAiC;IACpC,aAAO,QAAP;IACH;IACJ;;IACD,SAAOH,QAAP;IACH;;IAED,SAASM,kCAAT,CACIC,eADJ,EAEIC,QAFJ;IAII,SAAOnB,0BAA0B,CAAC,UAACrE,KAAD,EAAQC,QAAR,EAAkB6C,aAAlB,EAAiC2B,QAAjC,EAA2CC,YAA3C;IAC9B,WAAOE,cAAS,CAAC;IACb,UAAIW,eAAJ,EAAqB;IACjB,YAAIL,WAAW,CAAClF,KAAK,CAACC,QAAD,CAAN,CAAX,KAAiCuF,QAAQ,CAACC,WAAT,EAArC,EAA6D,OAAO,IAAP;IAChE;;IACD,UAAIC,WAAJ;;IACA,cAAQF,QAAR;IACI,aAAK,OAAL;IACIE,UAAAA,WAAW,GAAGC,sBAAd;IACA;;IACJ,aAAK,QAAL;IACID,UAAAA,WAAW,GAAGE,uBAAd;IACA;;IACJ,aAAK,KAAL;IACIF,UAAAA,WAAW,GAAGG,oBAAd;IACA;;IACJ;IACI,gBAAM,IAAIzH,KAAJ,2BAAkCoH,QAAlC,CAAN;IAXR;;IAaA,UAAMP,SAAS,GAAGjF,KAAK,CAACC,QAAD,CAAvB;;IACA,UAAI,CAACyF,WAAW,CAACT,SAAD,CAAhB,EAA6B;IACzB,YAAMa,WAAW,GAAGV,cAAc,CAACH,SAAD,CAAlC;IACA,YAAMc,4BAA4B,GAAGR,eAAe,GAC9C,qBAAqBC,QAAQ,CAACC,WAAT,EAArB,GAA8C,GADA,GAE9C,EAFN;IAGA,eAAO,IAAIrH,KAAJ,CACH,mBACIsG,YADJ,GAEI,aAFJ,GAGIoB,WAHJ,GAII,eAJJ,GAKI,IALJ,GAMIhD,aANJ,GAOI,8BAPJ,GAQI0C,QARJ,GASI,GATJ,GAUIO,4BAVJ,GAWI,GAZD,CAAP;IAcH;;IACD,aAAO,IAAP;IACH,KAxCe,CAAhB;IAyCH,GA1CgC,CAAjC;IA2CH;;IAED,SAASC,kCAAT,CACIT,eADJ,EAEIU,WAFJ;IAII,SAAO5B,0BAA0B,CAC7B,UAACrE,KAAD,EAAQC,QAAR,EAAkB6C,aAAlB,EAAiC2B,QAAjC,EAA2CC,YAA3C;2CAA4DC;IAAAA,MAAAA;;;IACxD,WAAOC,cAAS,CAAC;IACb,UAAI,OAAOqB,WAAP,KAAuB,UAA3B,EAAuC;IACnC,eAAO,IAAI7H,KAAJ,CACH,eACIsG,YADJ,GAEI,kBAFJ,GAGI5B,aAHJ,GAII,QAJJ,GAKI,4BAND,CAAP;IAQH,OATD,MASO;IACH,YAAIoD,KAAK,GAAGZ,kCAAkC,CAACC,eAAD,EAAkB,OAAlB,CAAlC,CACRvF,KADQ,EAERC,QAFQ,EAGR6C,aAHQ,EAIR2B,QAJQ,EAKRC,YALQ,CAAZ;IAQA,YAAIwB,KAAK,YAAY9H,KAArB,EAA4B,OAAO8H,KAAP;IAC5B,YAAMjB,SAAS,GAAGjF,KAAK,CAACC,QAAD,CAAvB;;IACA,aAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyL,SAAS,CAAC1L,MAA9B,EAAsCC,CAAC,EAAvC,EAA2C;IACvC0M,UAAAA,KAAK,GAAID,WAAoC,MAApC,UACLhB,SADK,EAELzL,CAFK,EAGLsJ,aAHK,EAIL2B,QAJK,EAKLC,YAAY,GAAG,GAAf,GAAqBlL,CAArB,GAAyB,GALpB,SAMFmL,IANE,EAAT;IAQA,cAAIuB,KAAK,YAAY9H,KAArB,EAA4B,OAAO8H,KAAP;IAC/B;;IAED,eAAO,IAAP;IACH;IACJ,KAnCe,CAAhB;IAoCH,GAtC4B,CAAjC;IAwCH;;IAED,IAAMC,eAAe,gBAAGb,kCAAkC,CAAC,KAAD,EAAQ,OAAR,CAA1D;IACA,IAAMc,iBAAiB,gBAAGJ,kCAAkC,CAAChH,IAAnC,CAAwC,IAAxC,EAA8C,KAA9C,CAA1B;IACA,IAAMqH,aAAa,gBAAGf,kCAAkC,CAAC,KAAD,EAAQ,KAAR,CAAxD;IACA,IAAMgB,gBAAgB,gBAAGhB,kCAAkC,CAAC,KAAD,EAAQ,QAAR,CAA3D;IACA,IAAMiB,sBAAsB,gBAAGjB,kCAAkC,CAAC,IAAD,EAAO,OAAP,CAAjE;IACA,IAAMkB,wBAAwB,gBAAGR,kCAAkC,CAAChH,IAAnC,CAAwC,IAAxC,EAA8C,IAA9C,CAAjC;IACA,IAAMyH,wBAAwB,gBAAGnB,kCAAkC,CAAC,IAAD,EAAO,QAAP,CAAnE;AAEA,QAAaoB,SAAS,GAAG;IACrBP,EAAAA,eAAe,EAAfA,eADqB;IAErBC,EAAAA,iBAAiB,EAAjBA,iBAFqB;IAGrBC,EAAAA,aAAa,EAAbA,aAHqB;IAIrBC,EAAAA,gBAAgB,EAAhBA,gBAJqB;IAKrBC,EAAAA,sBAAsB,EAAtBA,sBALqB;IAMrBC,EAAAA,wBAAwB,EAAxBA,wBANqB;IAOrBC,EAAAA,wBAAwB,EAAxBA;IAPqB,CAAlB;;ICtMP,IAAI,CAACpH,eAAL,EAAgB,MAAM,IAAIjB,KAAJ,CAAU,2CAAV,CAAN;IAChB,IAAI,CAACuI,eAAL,EAAiB,MAAM,IAAIvI,KAAJ,CAAU,0CAAV,CAAN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/mobxreact.umd.production.min.js b/node_modules/mobx-react/dist/mobxreact.umd.production.min.js
new file mode 100644
index 0000000..00f730a
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.umd.production.min.js
@@ -0,0 +1,2 @@
+!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("mobx"),require("react"),require("mobx-react-lite")):"function"==typeof define&&define.amd?define(["exports","mobx","react","mobx-react-lite"],r):r((e=e||self).mobxReact={},e.mobx,e.React,e.mobxReactLite)}(this,(function(e,r,t,n){"use strict";var o="default"in t?t.default:t,a=0,i={};function c(e){return i[e]||(i[e]=function(e){if("function"==typeof Symbol)return Symbol(e);var r="__$mobx-react "+e+" ("+a+")";return a++,r}(e)),i[e]}function s(e,r){if(u(e,r))return!0;if("object"!=typeof e||null===e||"object"!=typeof r||null===r)return!1;var t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(var o=0;o<t.length;o++)if(!Object.hasOwnProperty.call(r,t[o])||!u(e[t[o]],r[t[o]]))return!1;return!0}function u(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}var f={$$typeof:1,render:1,compare:1,type:1,childContextTypes:1,contextType:1,contextTypes:1,defaultProps:1,getDefaultProps:1,getDerivedStateFromError:1,getDerivedStateFromProps:1,mixins:1,displayName:1,propTypes:1};function l(e,r,t){Object.hasOwnProperty.call(e,r)?e[r]=t:Object.defineProperty(e,r,{enumerable:!1,configurable:!0,writable:!0,value:t})}var p=c("patchMixins"),b=c("patchedDefinition");function d(e,r){for(var t=this,n=arguments.length,o=new Array(n>2?n-2:0),a=2;a<n;a++)o[a-2]=arguments[a];r.locks++;try{var i;return null!=e&&(i=e.apply(this,o)),i}finally{r.locks--,0===r.locks&&r.methods.forEach((function(e){e.apply(t,o)}))}}function y(e,r){return function(){for(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];d.call.apply(d,[this,e,r].concat(n))}}function m(e,r,t){var n=function(e,r){var t=e[p]=e[p]||{},n=t[r]=t[r]||{};return n.locks=n.locks||0,n.methods=n.methods||[],n}(e,r);n.methods.indexOf(t)<0&&n.methods.push(t);var o=Object.getOwnPropertyDescriptor(e,r);if(!o||!o[b]){var a=function e(r,t,n,o,a){var i,c=y(a,o);return(i={})[b]=!0,i.get=function(){return c},i.set=function(a){if(this===r)c=y(a,o);else{var i=e(this,t,n,o,a);Object.defineProperty(this,t,i)}},i.configurable=!0,i.enumerable=n,i}(e,r,o?o.enumerable:void 0,n,e[r]);Object.defineProperty(e,r,a)}}var v=r.$mobx||"$mobx",h=c("isMobXReactObserver"),O=c("isUnmounted"),g=c("skipRender"),w=c("isForcingUpdate");function j(e){var r=e.prototype;if(e[h]){var o=P(r);console.warn("The provided component class ("+o+") \n                has already been declared as an observer component.")}else e[h]=!0;if(r.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==t.PureComponent)if(r.shouldComponentUpdate){if(r.shouldComponentUpdate!==R)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else r.shouldComponentUpdate=R;S(r,"props"),S(r,"state");var a=r.render;if("function"!=typeof a){var i=P(r);throw new Error("[mobx-react] class component ("+i+") is missing `render` method.\n`observer` requires `render` being a function defined on prototype.\n`render = () => {}` or `render = function() {}` is not supported.")}return r.render=function(){return x.call(this,a)},m(r,"componentWillUnmount",(function(){var e;if(!0!==n.isUsingStaticRendering()&&(null==(e=this.render[v])||e.dispose(),this[O]=!0,!this.render[v])){var r=P(this);console.warn("The reactive render of an observer class component ("+r+") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.")}})),e}function P(e){return e.displayName||e.name||e.constructor&&(e.constructor.displayName||e.constructor.name)||"<component>"}function x(e){var o=this;if(!0===n.isUsingStaticRendering())return e.call(this);l(this,g,!1),l(this,w,!1);var a=P(this),i=e.bind(this),c=!1,s=new r.Reaction(a+".render()",(function(){if(!c&&(c=!0,!0!==o[O])){var e=!0;try{l(o,w,!0),o[g]||t.Component.prototype.forceUpdate.call(o),e=!1}finally{l(o,w,!1),e&&s.dispose()}}}));function u(){c=!1;var e=void 0,t=void 0;if(s.track((function(){try{t=r._allowStateChanges(!1,i)}catch(r){e=r}})),e)throw e;return t}return s.reactComponent=this,u[v]=s,this.render=u,u.call(this)}function R(e,r){return n.isUsingStaticRendering()&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==r||!s(this.props,e)}function S(e,t){var n=c("reactProp_"+t+"_valueHolder"),o=c("reactProp_"+t+"_atomHolder");function a(){return this[o]||l(this,o,r.createAtom("reactive "+t)),this[o]}Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){var e=!1;return r._allowStateReadsStart&&r._allowStateReadsEnd&&(e=r._allowStateReadsStart(!0)),a.call(this).reportObserved(),r._allowStateReadsStart&&r._allowStateReadsEnd&&r._allowStateReadsEnd(e),this[n]},set:function(e){this[w]||s(this[n],e)?l(this,n,e):(l(this,n,e),l(this,g,!0),a.call(this).reportChanged(),l(this,g,!1))}})}var C="function"==typeof Symbol&&Symbol.for,E=C?Symbol.for("react.forward_ref"):"function"==typeof t.forwardRef&&t.forwardRef((function(e){return null})).$$typeof,A=C?Symbol.for("react.memo"):"function"==typeof t.memo&&t.memo((function(e){return null})).$$typeof;function k(e){if(!0===e.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),A&&e.$$typeof===A)throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(E&&e.$$typeof===E){var r=e.render;if("function"!=typeof r)throw new Error("render property of ForwardRef was not a function");return t.forwardRef((function(){var e=arguments;return t.createElement(n.Observer,null,(function(){return r.apply(void 0,e)}))}))}return"function"!=typeof e||e.prototype&&e.prototype.render||e.isReactClass||Object.prototype.isPrototypeOf.call(t.Component,e)?j(e):n.observer(e)}function U(){return(U=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var _=o.createContext({});function M(e){var r=e.children,t=function(e,r){if(null==e)return{};var t,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r.indexOf(t=a[n])>=0||(o[t]=e[t]);return o}(e,["children"]),n=o.useContext(_),a=o.useRef(U({},n,t));return o.createElement(_.Provider,{value:a.current},r)}function T(e,r,t,n){var a,i,c,s=o.forwardRef((function(t,n){var a=U({},t),i=o.useContext(_);return Object.assign(a,e(i||{},a)||{}),n&&(a.ref=n),o.createElement(r,a)}));return n&&(s=k(s)),s.isMobxInjector=!0,a=r,i=s,c=Object.getOwnPropertyNames(Object.getPrototypeOf(a)),Object.getOwnPropertyNames(a).forEach((function(e){f[e]||-1!==c.indexOf(e)||Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(a,e))})),s.wrappedComponent=r,s.displayName=function(e,r){var t=e.displayName||e.name||e.constructor&&e.constructor.name||"Component";return r?"inject-with-"+r+"("+t+")":"inject("+t+")"}(r,t),s}function $(e){return function(r,t){return e.forEach((function(e){if(!(e in t)){if(!(e in r))throw new Error("MobX injector: Store '"+e+"' is not available! Make sure it is provided by some Provider");t[e]=r[e]}})),t}}M.displayName="MobXProvider";var q=c("disposeOnUnmountProto"),N=c("disposeOnUnmountInst");function D(){var e=this;[].concat(this[q]||[],this[N]||[]).forEach((function(r){var t="string"==typeof r?e[r]:r;null!=t&&(Array.isArray(t)?t.map((function(e){return e()})):t())}))}function L(e){function t(t,n,o,a,i,c){for(var s=arguments.length,u=new Array(s>6?s-6:0),f=6;f<s;f++)u[f-6]=arguments[f];return r.untracked((function(){return a=a||"<<anonymous>>",c=c||o,null==n[o]?t?new Error("The "+i+" `"+c+"` is marked as required in `"+a+"`, but its value is `"+(null===n[o]?"null":"undefined")+"`."):null:e.apply(void 0,[n,o,a,i,c].concat(u))}))}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function I(e){var r=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":function(e,r){return"symbol"===e||"Symbol"===r["@@toStringTag"]||"function"==typeof Symbol&&r instanceof Symbol}(r,e)?"symbol":r}function X(e,t){return L((function(n,o,a,i,c){return r.untracked((function(){if(e&&I(n[o])===t.toLowerCase())return null;var i;switch(t){case"Array":i=r.isObservableArray;break;case"Object":i=r.isObservableObject;break;case"Map":i=r.isObservableMap;break;default:throw new Error("Unexpected mobxType: "+t)}var s=n[o];if(!i(s)){var u=function(e){var r=I(e);if("object"===r){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return r}(s),f=e?" or javascript `"+t.toLowerCase()+"`":"";return new Error("Invalid prop `"+c+"` of type `"+u+"` supplied to `"+a+"`, expected `mobx.Observable"+t+"`"+f+".")}return null}))}))}function F(e,t){return L((function(n,o,a,i,c){for(var s=arguments.length,u=new Array(s>5?s-5:0),f=5;f<s;f++)u[f-5]=arguments[f];return r.untracked((function(){if("function"!=typeof t)return new Error("Property `"+c+"` of component `"+a+"` has invalid PropType notation.");var r=X(e,"Array")(n,o,a,i,c);if(r instanceof Error)return r;for(var s=n[o],f=0;f<s.length;f++)if((r=t.apply(void 0,[s,f,a,i,c+"["+f+"]"].concat(u)))instanceof Error)return r;return null}))}))}var W={observableArray:X(!1,"Array"),observableArrayOf:F.bind(null,!1),observableMap:X(!1,"Map"),observableObject:X(!1,"Object"),arrayOrObservableArray:X(!0,"Array"),arrayOrObservableArrayOf:F.bind(null,!0),objectOrObservableObject:X(!0,"Object")};if(!t.Component)throw new Error("mobx-react requires React to be available");if(!r.observable)throw new Error("mobx-react requires mobx to be available");Object.defineProperty(e,"Observer",{enumerable:!0,get:function(){return n.Observer}}),Object.defineProperty(e,"enableStaticRendering",{enumerable:!0,get:function(){return n.enableStaticRendering}}),Object.defineProperty(e,"isUsingStaticRendering",{enumerable:!0,get:function(){return n.isUsingStaticRendering}}),Object.defineProperty(e,"observerBatching",{enumerable:!0,get:function(){return n.observerBatching}}),Object.defineProperty(e,"useAsObservableSource",{enumerable:!0,get:function(){return n.useAsObservableSource}}),Object.defineProperty(e,"useLocalObservable",{enumerable:!0,get:function(){return n.useLocalObservable}}),Object.defineProperty(e,"useLocalStore",{enumerable:!0,get:function(){return n.useLocalStore}}),Object.defineProperty(e,"useObserver",{enumerable:!0,get:function(){return n.useObserver}}),Object.defineProperty(e,"useStaticRendering",{enumerable:!0,get:function(){return n.useStaticRendering}}),e.MobXProviderContext=_,e.PropTypes=W,e.Provider=M,e.disposeOnUnmount=function e(r,t){if(Array.isArray(t))return t.map((function(t){return e(r,t)}));var n=Object.getPrototypeOf(r).constructor,a=Object.getPrototypeOf(r.constructor),i=Object.getPrototypeOf(Object.getPrototypeOf(r));if(n!==o.Component&&n!==o.PureComponent&&a!==o.Component&&a!==o.PureComponent&&i!==o.Component&&i!==o.PureComponent)throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.");if("string"!=typeof t&&"function"!=typeof t&&!Array.isArray(t))throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.");var c=!!r[q]||!!r[N];return("string"==typeof t?r[q]||(r[q]=[]):r[N]||(r[N]=[])).push(t),c||m(r,"componentWillUnmount",D),"string"!=typeof t?t:void 0},e.inject=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];if("function"==typeof arguments[0]){var n=arguments[0];return function(e){return T(n,e,n.name,!0)}}return function(e){return T($(r),e,r.join("-"),!1)}},e.observer=k,Object.defineProperty(e,"__esModule",{value:!0})}));
+//# sourceMappingURL=mobxreact.umd.production.min.js.map
diff --git a/node_modules/mobx-react/dist/mobxreact.umd.production.min.js.map b/node_modules/mobx-react/dist/mobxreact.umd.production.min.js.map
new file mode 100644
index 0000000..8a0fae1
--- /dev/null
+++ b/node_modules/mobx-react/dist/mobxreact.umd.production.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mobxreact.umd.production.min.js","sources":["../src/utils/utils.ts","../src/observerClass.ts","../src/observer.tsx","../src/Provider.tsx","../src/inject.ts","../src/disposeOnUnmount.ts","../src/propTypes.ts","../src/index.ts"],"sourcesContent":["let symbolId = 0\nfunction createSymbol(name: string): symbol | string {\n    if (typeof Symbol === \"function\") {\n        return Symbol(name)\n    }\n    const symbol = `__$mobx-react ${name} (${symbolId})`\n    symbolId++\n    return symbol\n}\n\nconst createdSymbols = {}\nexport function newSymbol(name: string): symbol | string {\n    if (!createdSymbols[name]) {\n        createdSymbols[name] = createSymbol(name)\n    }\n    return createdSymbols[name]\n}\n\nexport function shallowEqual(objA: any, objB: any): boolean {\n    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (is(objA, objB)) return true\n    if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n        return false\n    }\n    const keysA = Object.keys(objA)\n    const keysB = Object.keys(objB)\n    if (keysA.length !== keysB.length) return false\n    for (let i = 0; i < keysA.length; i++) {\n        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n            return false\n        }\n    }\n    return true\n}\n\nfunction is(x: any, y: any): boolean {\n    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n    if (x === y) {\n        return x !== 0 || 1 / x === 1 / y\n    } else {\n        return x !== x && y !== y\n    }\n}\n\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nconst hoistBlackList = {\n    $$typeof: 1,\n    render: 1,\n    compare: 1,\n    type: 1,\n    childContextTypes: 1,\n    contextType: 1,\n    contextTypes: 1,\n    defaultProps: 1,\n    getDefaultProps: 1,\n    getDerivedStateFromError: 1,\n    getDerivedStateFromProps: 1,\n    mixins: 1,\n    displayName: 1,\n    propTypes: 1\n}\n\nexport function copyStaticProperties(base: object, target: object): void {\n    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))\n    Object.getOwnPropertyNames(base).forEach(key => {\n        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)\n        }\n    })\n}\n\n/**\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\n * @param target\n * @param prop\n * @param value\n */\nexport function setHiddenProp(target: object, prop: any, value: any): void {\n    if (!Object.hasOwnProperty.call(target, prop)) {\n        Object.defineProperty(target, prop, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value\n        })\n    } else {\n        target[prop] = value\n    }\n}\n\n/**\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\n * and the handler provided by mobx-react\n */\nconst mobxMixins = newSymbol(\"patchMixins\")\nconst mobxPatchedDefinition = newSymbol(\"patchedDefinition\")\n\nexport interface Mixins extends Record<string, any> {\n    locks: number\n    methods: Array<Function>\n}\n\nfunction getMixins(target: object, methodName: string): Mixins {\n    const mixins = (target[mobxMixins] = target[mobxMixins] || {})\n    const methodMixins = (mixins[methodName] = mixins[methodName] || {})\n    methodMixins.locks = methodMixins.locks || 0\n    methodMixins.methods = methodMixins.methods || []\n    return methodMixins\n}\n\nfunction wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {\n    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n    mixins.locks++\n\n    try {\n        let retVal\n        if (realMethod !== undefined && realMethod !== null) {\n            retVal = realMethod.apply(this, args)\n        }\n\n        return retVal\n    } finally {\n        mixins.locks--\n        if (mixins.locks === 0) {\n            mixins.methods.forEach(mx => {\n                mx.apply(this, args)\n            })\n        }\n    }\n}\n\nfunction wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {\n    const fn = function (...args: Array<any>) {\n        wrapper.call(this, realMethod, mixins, ...args)\n    }\n    return fn\n}\n\nexport function patch(target: object, methodName: string, mixinMethod: Function): void {\n    const mixins = getMixins(target, methodName)\n\n    if (mixins.methods.indexOf(mixinMethod) < 0) {\n        mixins.methods.push(mixinMethod)\n    }\n\n    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)\n    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n        // already patched definition, do not repatch\n        return\n    }\n\n    const originalMethod = target[methodName]\n    const newDefinition = createDefinition(\n        target,\n        methodName,\n        oldDefinition ? oldDefinition.enumerable : undefined,\n        mixins,\n        originalMethod\n    )\n\n    Object.defineProperty(target, methodName, newDefinition)\n}\n\nfunction createDefinition(\n    target: object,\n    methodName: string,\n    enumerable: any,\n    mixins: Mixins,\n    originalMethod: Function\n): PropertyDescriptor {\n    let wrappedFunc = wrapFunction(originalMethod, mixins)\n\n    return {\n        [mobxPatchedDefinition]: true,\n        get: function () {\n            return wrappedFunc\n        },\n        set: function (value) {\n            if (this === target) {\n                wrappedFunc = wrapFunction(value, mixins)\n            } else {\n                // when it is an instance of the prototype/a child prototype patch that particular case again separately\n                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n                // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n                // as the method for the instance\n                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)\n                Object.defineProperty(this, methodName, newDefinition)\n            }\n        },\n        configurable: true,\n        enumerable: enumerable\n    }\n}\n","import { PureComponent, Component } from \"react\"\nimport {\n    createAtom,\n    _allowStateChanges,\n    Reaction,\n    $mobx,\n    _allowStateReadsStart,\n    _allowStateReadsEnd\n} from \"mobx\"\nimport { isUsingStaticRendering } from \"mobx-react-lite\"\n\nimport { newSymbol, shallowEqual, setHiddenProp, patch } from \"./utils/utils\"\n\nconst mobxAdminProperty = $mobx || \"$mobx\"\nconst mobxObserverProperty = newSymbol(\"isMobXReactObserver\")\nconst mobxIsUnmounted = newSymbol(\"isUnmounted\")\nconst skipRenderKey = newSymbol(\"skipRender\")\nconst isForcingUpdateKey = newSymbol(\"isForcingUpdate\")\n\nexport function makeClassComponentObserver(\n    componentClass: React.ComponentClass<any, any>\n): React.ComponentClass<any, any> {\n    const target = componentClass.prototype\n\n    if (componentClass[mobxObserverProperty]) {\n        const displayName = getDisplayName(target)\n        console.warn(\n            `The provided component class (${displayName}) \n                has already been declared as an observer component.`\n        )\n    } else {\n        componentClass[mobxObserverProperty] = true\n    }\n\n    if (target.componentWillReact)\n        throw new Error(\"The componentWillReact life-cycle event is no longer supported\")\n    if (componentClass[\"__proto__\"] !== PureComponent) {\n        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU\n        else if (target.shouldComponentUpdate !== observerSCU)\n            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n            throw new Error(\n                \"It is not allowed to use shouldComponentUpdate in observer based components.\"\n            )\n    }\n\n    // this.props and this.state are made observable, just to make sure @computed fields that\n    // are defined inside the component, and which rely on state or props, re-compute if state or props change\n    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n    makeObservableProp(target, \"props\")\n    makeObservableProp(target, \"state\")\n\n    const baseRender = target.render\n    if (typeof baseRender !== 'function') {\n        const displayName = getDisplayName(target)\n        throw new Error(\n            `[mobx-react] class component (${displayName}) is missing \\`render\\` method.`\n            + `\\n\\`observer\\` requires \\`render\\` being a function defined on prototype.`\n            + `\\n\\`render = () => {}\\` or \\`render = function() {}\\` is not supported.`\n        )\n    }\n    target.render = function () {\n        return makeComponentReactive.call(this, baseRender)\n    }\n    patch(target, \"componentWillUnmount\", function () {\n        if (isUsingStaticRendering() === true) return\n        this.render[mobxAdminProperty]?.dispose()\n        this[mobxIsUnmounted] = true\n\n        if (!this.render[mobxAdminProperty]) {\n            // Render may have been hot-swapped and/or overriden by a subclass.\n            const displayName = getDisplayName(this)\n            console.warn(\n                `The reactive render of an observer class component (${displayName}) \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.`\n            )\n        }\n    })\n    return componentClass\n}\n\n// Generates a friendly name for debugging\nfunction getDisplayName(comp: any) {\n    return (\n        comp.displayName ||\n        comp.name ||\n        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||\n        \"<component>\"\n    )\n}\n\nfunction makeComponentReactive(render: any) {\n    if (isUsingStaticRendering() === true) return render.call(this)\n\n    /**\n     * If props are shallowly modified, react will render anyway,\n     * so atom.reportChanged() should not result in yet another re-render\n     */\n    setHiddenProp(this, skipRenderKey, false)\n    /**\n     * forceUpdate will re-assign this.props. We don't want that to cause a loop,\n     * so detect these changes\n     */\n    setHiddenProp(this, isForcingUpdateKey, false)\n\n    const initialName = getDisplayName(this)\n    const baseRender = render.bind(this)\n\n    let isRenderingPending = false\n\n    const reaction = new Reaction(`${initialName}.render()`, () => {\n        if (!isRenderingPending) {\n            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)\n            // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n            // See #85 / Pull #44\n            isRenderingPending = true\n            if (this[mobxIsUnmounted] !== true) {\n                let hasError = true\n                try {\n                    setHiddenProp(this, isForcingUpdateKey, true)\n                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)\n                    hasError = false\n                } finally {\n                    setHiddenProp(this, isForcingUpdateKey, false)\n                    if (hasError) reaction.dispose()\n                }\n            }\n        }\n    })\n\n    reaction[\"reactComponent\"] = this\n    reactiveRender[mobxAdminProperty] = reaction\n    this.render = reactiveRender\n\n    function reactiveRender() {\n        isRenderingPending = false\n        let exception = undefined\n        let rendering = undefined\n        reaction.track(() => {\n            try {\n                rendering = _allowStateChanges(false, baseRender)\n            } catch (e) {\n                exception = e\n            }\n        })\n        if (exception) {\n            throw exception\n        }\n        return rendering\n    }\n\n    return reactiveRender.call(this)\n}\n\nfunction observerSCU(nextProps: React.Props<any>, nextState: any): boolean {\n    if (isUsingStaticRendering()) {\n        console.warn(\n            \"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\"\n        )\n    }\n    // update on any state changes (as is the default)\n    if (this.state !== nextState) {\n        return true\n    }\n    // update if props are shallowly not equal, inspired by PureRenderMixin\n    // we could return just 'false' here, and avoid the `skipRender` checks etc\n    // however, it is nicer if lifecycle events are triggered like usually,\n    // so we return true here if props are shallowly modified.\n    return !shallowEqual(this.props, nextProps)\n}\n\nfunction makeObservableProp(target: any, propName: string): void {\n    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)\n    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)\n    function getAtom() {\n        if (!this[atomHolderKey]) {\n            setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName))\n        }\n        return this[atomHolderKey]\n    }\n    Object.defineProperty(target, propName, {\n        configurable: true,\n        enumerable: true,\n        get: function () {\n            let prevReadState = false\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                prevReadState = _allowStateReadsStart(true)\n            }\n            getAtom.call(this).reportObserved()\n\n            if (_allowStateReadsStart && _allowStateReadsEnd) {\n                _allowStateReadsEnd(prevReadState)\n            }\n\n            return this[valueHolderKey]\n        },\n        set: function set(v) {\n            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n                setHiddenProp(this, valueHolderKey, v)\n                setHiddenProp(this, skipRenderKey, true)\n                getAtom.call(this).reportChanged()\n                setHiddenProp(this, skipRenderKey, false)\n            } else {\n                setHiddenProp(this, valueHolderKey, v)\n            }\n        }\n    })\n}\n","import * as React from \"react\"\nimport { observer as observerLite, Observer } from \"mobx-react-lite\"\n\nimport { makeClassComponentObserver } from \"./observerClass\"\nimport { IReactComponent } from \"./types/IReactComponent\"\n\nconst hasSymbol = typeof Symbol === \"function\" && Symbol.for\n\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nconst ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof React.forwardRef === \"function\" && React.forwardRef((props: any) => null)[\"$$typeof\"]\n\nconst ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof React.memo === \"function\" && React.memo((props: any) => null)[\"$$typeof\"]\n\n/**\n * Observer function / decorator\n */\nexport function observer<T extends IReactComponent>(component: T): T {\n    if (component[\"isMobxInjector\"] === true) {\n        console.warn(\n            \"Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'\"\n        )\n    }\n\n    if (ReactMemoSymbol && component[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\n            \"Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.\"\n        )\n    }\n\n    // Unwrap forward refs into `<Observer>` component\n    // we need to unwrap the render, because it is the inner render that needs to be tracked,\n    // not the ForwardRef HoC\n    if (ReactForwardRefSymbol && component[\"$$typeof\"] === ReactForwardRefSymbol) {\n        const baseRender = component[\"render\"]\n        if (typeof baseRender !== \"function\")\n            throw new Error(\"render property of ForwardRef was not a function\")\n        return React.forwardRef(function ObserverForwardRef() {\n            const args = arguments\n            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>\n        }) as T\n    }\n\n    // Function component\n    if (\n        typeof component === \"function\" &&\n        (!component.prototype || !component.prototype.render) &&\n        !component[\"isReactClass\"] &&\n        !Object.prototype.isPrototypeOf.call(React.Component, component)\n    ) {\n        return observerLite(component as React.StatelessComponent<any>) as T\n    }\n\n    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T\n}\n","import React from \"react\"\nimport { shallowEqual } from \"./utils/utils\"\nimport { IValueMap } from \"./types/IValueMap\"\n\nexport const MobXProviderContext = React.createContext<IValueMap>({})\n\nexport interface ProviderProps extends IValueMap {\n    children: React.ReactNode\n}\n\nexport function Provider(props: ProviderProps) {\n    const { children, ...stores } = props\n    const parentValue = React.useContext(MobXProviderContext)\n    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })\n    const value = mutableProviderRef.current\n\n    if (__DEV__) {\n        const newValue = { ...value, ...stores } // spread in previous state for the context based stores\n        if (!shallowEqual(value, newValue)) {\n            throw new Error(\n                \"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\"\n            )\n        }\n    }\n\n    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>\n}\n\nProvider.displayName = \"MobXProvider\"\n","import React from \"react\"\nimport { observer } from \"./observer\"\nimport { copyStaticProperties } from \"./utils/utils\"\nimport { MobXProviderContext } from \"./Provider\"\nimport { IReactComponent } from \"./types/IReactComponent\"\nimport { IValueMap } from \"./types/IValueMap\"\nimport { IWrappedComponent } from \"./types/IWrappedComponent\"\nimport { IStoresToProps } from \"./types/IStoresToProps\"\n\n/**\n * Store Injection\n */\nfunction createStoreInjector(\n    grabStoresFn: IStoresToProps,\n    component: IReactComponent<any>,\n    injectNames: string,\n    makeReactive: boolean\n): IReactComponent<any> {\n    // Support forward refs\n    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {\n        const newProps = { ...props }\n        const context = React.useContext(MobXProviderContext)\n        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})\n\n        if (ref) {\n            newProps.ref = ref\n        }\n\n        return React.createElement(component, newProps)\n    })\n\n    if (makeReactive) Injector = observer(Injector)\n    Injector[\"isMobxInjector\"] = true // assigned late to suppress observer warning\n\n    // Static fields from component should be visible on the generated Injector\n    copyStaticProperties(component, Injector)\n    Injector[\"wrappedComponent\"] = component\n    Injector.displayName = getInjectName(component, injectNames)\n    return Injector\n}\n\nfunction getInjectName(component: IReactComponent<any>, injectNames: string): string {\n    let displayName\n    const componentName =\n        component.displayName ||\n        component.name ||\n        (component.constructor && component.constructor.name) ||\n        \"Component\"\n    if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\"\n    else displayName = \"inject(\" + componentName + \")\"\n    return displayName\n}\n\nfunction grabStoresByName(\n    storeNames: Array<string>\n): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {\n    return function (baseStores, nextProps) {\n        storeNames.forEach(function (storeName) {\n            if (\n                storeName in nextProps // prefer props over stores\n            )\n                return\n            if (!(storeName in baseStores))\n                throw new Error(\n                    \"MobX injector: Store '\" +\n                        storeName +\n                        \"' is not available! Make sure it is provided by some Provider\"\n                )\n            nextProps[storeName] = baseStores[storeName]\n        })\n        return nextProps\n    }\n}\n\nexport function inject(\n    ...stores: Array<string>\n): <T extends IReactComponent<any>>(\n    target: T\n) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)\nexport function inject<S, P, I, C>(\n    fn: IStoresToProps<S, P, I, C>\n): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>\n\n/**\n * higher order component that injects stores to a child.\n * takes either a varargs list of strings, which are stores read from the context,\n * or a function that manually maps the available stores from the context to props:\n * storesToProps(mobxStores, props, context) => newProps\n */\nexport function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {\n    if (typeof arguments[0] === \"function\") {\n        let grabStoresFn = arguments[0]\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)\n    } else {\n        return (componentClass: React.ComponentClass<any, any>) =>\n            createStoreInjector(\n                grabStoresByName(storeNames),\n                componentClass,\n                storeNames.join(\"-\"),\n                false\n            )\n    }\n}\n","import React from \"react\"\nimport { patch, newSymbol } from \"./utils/utils\"\n\ntype Disposer = () => void\n\nconst protoStoreKey = newSymbol(\"disposeOnUnmountProto\")\nconst instStoreKey = newSymbol(\"disposeOnUnmountInst\")\n\nfunction runDisposersOnWillUnmount() {\n    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {\n        const prop =\n            typeof propKeyOrFunction === \"string\" ? this[propKeyOrFunction] : propKeyOrFunction\n        if (prop !== undefined && prop !== null) {\n            if (Array.isArray(prop)) prop.map(f => f())\n            else prop()\n        }\n    })\n}\n\nexport function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void\nexport function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(\n    target: React.Component<any, any>,\n    fn: TF\n): TF\n\nexport function disposeOnUnmount(\n    target: React.Component<any, any>,\n    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>\n): PropertyKey | Disposer | Array<Disposer> | void {\n    if (Array.isArray(propertyKeyOrFunction)) {\n        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))\n    }\n\n    const c = Object.getPrototypeOf(target).constructor\n    const c2 = Object.getPrototypeOf(target.constructor)\n    // Special case for react-hot-loader\n    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))\n    if (\n        !(\n            c === React.Component ||\n            c === React.PureComponent ||\n            c2 === React.Component ||\n            c2 === React.PureComponent ||\n            c3 === React.Component ||\n            c3 === React.PureComponent\n        )\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\"\n        )\n    }\n\n    if (\n        typeof propertyKeyOrFunction !== \"string\" &&\n        typeof propertyKeyOrFunction !== \"function\" &&\n        !Array.isArray(propertyKeyOrFunction)\n    ) {\n        throw new Error(\n            \"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\"\n        )\n    }\n\n    // decorator's target is the prototype, so it doesn't have any instance properties like props\n    const isDecorator = typeof propertyKeyOrFunction === \"string\"\n\n    // add property key / function we want run (disposed) to the store\n    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]\n    const store = isDecorator\n        ? // decorators are added to the prototype store\n          target[protoStoreKey] || (target[protoStoreKey] = [])\n        : // functions are added to the instance store\n          target[instStoreKey] || (target[instStoreKey] = [])\n\n    store.push(propertyKeyOrFunction)\n\n    // tweak the component class componentWillUnmount if not done already\n    if (!componentWasAlreadyModified) {\n        patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount)\n    }\n\n    // return the disposer as is if invoked as a non decorator\n    if (typeof propertyKeyOrFunction !== \"string\") {\n        return propertyKeyOrFunction\n    }\n}\n","import { isObservableArray, isObservableObject, isObservableMap, untracked } from \"mobx\"\n\n// Copied from React.PropTypes\nfunction createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {\n    function checkType(\n        isRequired: boolean,\n        props: any,\n        propName: string,\n        componentName: string,\n        location: string,\n        propFullName: string,\n        ...rest: any[]\n    ) {\n        return untracked(() => {\n            componentName = componentName || \"<<anonymous>>\"\n            propFullName = propFullName || propName\n            if (props[propName] == null) {\n                if (isRequired) {\n                    const actual = props[propName] === null ? \"null\" : \"undefined\"\n                    return new Error(\n                        \"The \" +\n                            location +\n                            \" `\" +\n                            propFullName +\n                            \"` is marked as required \" +\n                            \"in `\" +\n                            componentName +\n                            \"`, but its value is `\" +\n                            actual +\n                            \"`.\"\n                    )\n                }\n                return null\n            } else {\n                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n                return validator(props, propName, componentName, location, propFullName, ...rest)\n            }\n        })\n    }\n\n    const chainedCheckType: any = checkType.bind(null, false)\n    // Add isRequired to satisfy Requirable\n    chainedCheckType.isRequired = checkType.bind(null, true)\n    return chainedCheckType\n}\n\n// Copied from React.PropTypes\nfunction isSymbol(propType: any, propValue: any): boolean {\n    // Native Symbol.\n    if (propType === \"symbol\") {\n        return true\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n        return true\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n        return true\n    }\n\n    return false\n}\n\n// Copied from React.PropTypes\nfunction getPropType(propValue: any): string {\n    const propType = typeof propValue\n    if (Array.isArray(propValue)) {\n        return \"array\"\n    }\n    if (propValue instanceof RegExp) {\n        // Old webkits (at least until Android 4.0) return 'function' rather than\n        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n        // passes PropTypes.object.\n        return \"object\"\n    }\n    if (isSymbol(propType, propValue)) {\n        return \"symbol\"\n    }\n    return propType\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\nfunction getPreciseType(propValue: any): string {\n    const propType = getPropType(propValue)\n    if (propType === \"object\") {\n        if (propValue instanceof Date) {\n            return \"date\"\n        } else if (propValue instanceof RegExp) {\n            return \"regexp\"\n        }\n    }\n    return propType\n}\n\nfunction createObservableTypeCheckerCreator(\n    allowNativeType: any,\n    mobxType: any\n): React.Requireable<any> {\n    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {\n        return untracked(() => {\n            if (allowNativeType) {\n                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null\n            }\n            let mobxChecker\n            switch (mobxType) {\n                case \"Array\":\n                    mobxChecker = isObservableArray\n                    break\n                case \"Object\":\n                    mobxChecker = isObservableObject\n                    break\n                case \"Map\":\n                    mobxChecker = isObservableMap\n                    break\n                default:\n                    throw new Error(`Unexpected mobxType: ${mobxType}`)\n            }\n            const propValue = props[propName]\n            if (!mobxChecker(propValue)) {\n                const preciseType = getPreciseType(propValue)\n                const nativeTypeExpectationMessage = allowNativeType\n                    ? \" or javascript `\" + mobxType.toLowerCase() + \"`\"\n                    : \"\"\n                return new Error(\n                    \"Invalid prop `\" +\n                        propFullName +\n                        \"` of type `\" +\n                        preciseType +\n                        \"` supplied to\" +\n                        \" `\" +\n                        componentName +\n                        \"`, expected `mobx.Observable\" +\n                        mobxType +\n                        \"`\" +\n                        nativeTypeExpectationMessage +\n                        \".\"\n                )\n            }\n            return null\n        })\n    })\n}\n\nfunction createObservableArrayOfTypeChecker(\n    allowNativeType: boolean,\n    typeChecker: React.Validator<any>\n) {\n    return createChainableTypeChecker(\n        (props, propName, componentName, location, propFullName, ...rest) => {\n            return untracked(() => {\n                if (typeof typeChecker !== \"function\") {\n                    return new Error(\n                        \"Property `\" +\n                            propFullName +\n                            \"` of component `\" +\n                            componentName +\n                            \"` has \" +\n                            \"invalid PropType notation.\"\n                    )\n                } else {\n                    let error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(\n                        props,\n                        propName,\n                        componentName,\n                        location,\n                        propFullName\n                    )\n\n                    if (error instanceof Error) return error\n                    const propValue = props[propName]\n                    for (let i = 0; i < propValue.length; i++) {\n                        error = (typeChecker as React.Validator<any>)(\n                            propValue,\n                            i as any,\n                            componentName,\n                            location,\n                            propFullName + \"[\" + i + \"]\",\n                            ...rest\n                        )\n                        if (error instanceof Error) return error\n                    }\n\n                    return null\n                }\n            })\n        }\n    )\n}\n\nconst observableArray = createObservableTypeCheckerCreator(false, \"Array\")\nconst observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)\nconst observableMap = createObservableTypeCheckerCreator(false, \"Map\")\nconst observableObject = createObservableTypeCheckerCreator(false, \"Object\")\nconst arrayOrObservableArray = createObservableTypeCheckerCreator(true, \"Array\")\nconst arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)\nconst objectOrObservableObject = createObservableTypeCheckerCreator(true, \"Object\")\n\nexport const PropTypes = {\n    observableArray,\n    observableArrayOf,\n    observableMap,\n    observableObject,\n    arrayOrObservableArray,\n    arrayOrObservableArrayOf,\n    objectOrObservableObject\n}\n","import { observable } from \"mobx\"\nimport { Component } from \"react\"\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\")\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\")\n\nexport {\n    Observer,\n    useObserver,\n    useAsObservableSource,\n    useLocalStore,\n    isUsingStaticRendering,\n    useStaticRendering,\n    enableStaticRendering,\n    observerBatching,\n    useLocalObservable\n} from \"mobx-react-lite\"\n\nexport { observer } from \"./observer\"\n\nexport { MobXProviderContext, Provider, ProviderProps } from \"./Provider\"\nexport { inject } from \"./inject\"\nexport { disposeOnUnmount } from \"./disposeOnUnmount\"\nexport { PropTypes } from \"./propTypes\"\nexport { IWrappedComponent } from \"./types/IWrappedComponent\"\n"],"names":["symbolId","createdSymbols","newSymbol","name","Symbol","symbol","createSymbol","shallowEqual","objA","objB","is","keysA","Object","keys","keysB","length","i","hasOwnProperty","call","x","y","hoistBlackList","$$typeof","render","compare","type","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","displayName","propTypes","setHiddenProp","target","prop","value","defineProperty","enumerable","configurable","writable","mobxMixins","mobxPatchedDefinition","wrapper","realMethod","args","locks","retVal","apply","this","methods","forEach","mx","_this","wrapFunction","patch","methodName","mixinMethod","methodMixins","getMixins","indexOf","push","oldDefinition","getOwnPropertyDescriptor","newDefinition","createDefinition","originalMethod","wrappedFunc","get","set","undefined","mobxAdminProperty","$mobx","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","prototype","getDisplayName","console","warn","componentWillReact","Error","PureComponent","shouldComponentUpdate","observerSCU","makeObservableProp","baseRender","makeComponentReactive","isUsingStaticRendering","dispose","comp","constructor","initialName","bind","isRenderingPending","reaction","Reaction","hasError","Component","forceUpdate","reactiveRender","exception","rendering","track","_allowStateChanges","e","nextProps","nextState","state","props","propName","valueHolderKey","atomHolderKey","getAtom","createAtom","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","reportObserved","v","reportChanged","hasSymbol","ReactForwardRefSymbol","React","ReactMemoSymbol","observer","component","arguments","Observer","isPrototypeOf","observerLite","MobXProviderContext","createContext","Provider","children","stores","parentValue","useContext","mutableProviderRef","useRef","current","createStoreInjector","grabStoresFn","injectNames","makeReactive","base","protoProps","Injector","forwardRef","ref","newProps","context","assign","createElement","getOwnPropertyNames","getPrototypeOf","key","componentName","getInjectName","grabStoresByName","storeNames","baseStores","storeName","protoStoreKey","instStoreKey","runDisposersOnWillUnmount","propKeyOrFunction","Array","isArray","map","f","createChainableTypeChecker","validator","checkType","isRequired","location","propFullName","rest","untracked","chainedCheckType","getPropType","propValue","propType","RegExp","isSymbol","createObservableTypeCheckerCreator","allowNativeType","mobxType","toLowerCase","mobxChecker","isObservableArray","isObservableObject","isObservableMap","preciseType","Date","getPreciseType","nativeTypeExpectationMessage","createObservableArrayOfTypeChecker","typeChecker","error","PropTypes","observableArray","observableArrayOf","observableMap","observableObject","arrayOrObservableArray","arrayOrObservableArrayOf","objectOrObservableObject","observable","disposeOnUnmount","propertyKeyOrFunction","fn","c","c2","c3","componentWasAlreadyModified","join"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/mobx-react/dist/observer.d.ts b/node_modules/mobx-react/dist/observer.d.ts
new file mode 100644
index 0000000..771afc6
--- /dev/null
+++ b/node_modules/mobx-react/dist/observer.d.ts
@@ -0,0 +1,5 @@
+import { IReactComponent } from "./types/IReactComponent";
+/**
+ * Observer function / decorator
+ */
+export declare function observer<T extends IReactComponent>(component: T): T;
diff --git a/node_modules/mobx-react/dist/observerClass.d.ts b/node_modules/mobx-react/dist/observerClass.d.ts
new file mode 100644
index 0000000..71bbe2a
--- /dev/null
+++ b/node_modules/mobx-react/dist/observerClass.d.ts
@@ -0,0 +1,2 @@
+/// <reference types="react" />
+export declare function makeClassComponentObserver(componentClass: React.ComponentClass<any, any>): React.ComponentClass<any, any>;
diff --git a/node_modules/mobx-react/dist/propTypes.d.ts b/node_modules/mobx-react/dist/propTypes.d.ts
new file mode 100644
index 0000000..cc6d161
--- /dev/null
+++ b/node_modules/mobx-react/dist/propTypes.d.ts
@@ -0,0 +1,10 @@
+/// <reference types="react" />
+export declare const PropTypes: {
+    observableArray: import("react").Requireable<any>;
+    observableArrayOf: (typeChecker: import("react").Validator<any>) => import("react").Requireable<any>;
+    observableMap: import("react").Requireable<any>;
+    observableObject: import("react").Requireable<any>;
+    arrayOrObservableArray: import("react").Requireable<any>;
+    arrayOrObservableArrayOf: (typeChecker: import("react").Validator<any>) => import("react").Requireable<any>;
+    objectOrObservableObject: import("react").Requireable<any>;
+};
diff --git a/node_modules/mobx-react/dist/types/IReactComponent.d.ts b/node_modules/mobx-react/dist/types/IReactComponent.d.ts
new file mode 100644
index 0000000..95956c2
--- /dev/null
+++ b/node_modules/mobx-react/dist/types/IReactComponent.d.ts
@@ -0,0 +1,2 @@
+/// <reference types="react" />
+export declare type IReactComponent<P = any> = React.ClassicComponentClass<P> | React.ComponentClass<P> | React.FunctionComponent<P> | React.ForwardRefExoticComponent<P>;
diff --git a/node_modules/mobx-react/dist/types/IStoresToProps.d.ts b/node_modules/mobx-react/dist/types/IStoresToProps.d.ts
new file mode 100644
index 0000000..5b8e113
--- /dev/null
+++ b/node_modules/mobx-react/dist/types/IStoresToProps.d.ts
@@ -0,0 +1,2 @@
+import { IValueMap } from "./IValueMap";
+export declare type IStoresToProps<S extends IValueMap = {}, P extends IValueMap = {}, I extends IValueMap = {}, C extends IValueMap = {}> = (stores: S, nextProps: P, context?: C) => I;
diff --git a/node_modules/mobx-react/dist/types/IValueMap.d.ts b/node_modules/mobx-react/dist/types/IValueMap.d.ts
new file mode 100644
index 0000000..77e1b5f
--- /dev/null
+++ b/node_modules/mobx-react/dist/types/IValueMap.d.ts
@@ -0,0 +1 @@
+export declare type IValueMap = Record<string, any>;
diff --git a/node_modules/mobx-react/dist/types/IWrappedComponent.d.ts b/node_modules/mobx-react/dist/types/IWrappedComponent.d.ts
new file mode 100644
index 0000000..4f73b63
--- /dev/null
+++ b/node_modules/mobx-react/dist/types/IWrappedComponent.d.ts
@@ -0,0 +1,4 @@
+import { IReactComponent } from "./IReactComponent";
+export declare type IWrappedComponent<P> = {
+    wrappedComponent: IReactComponent<P>;
+};
diff --git a/node_modules/mobx-react/dist/utils/utils.d.ts b/node_modules/mobx-react/dist/utils/utils.d.ts
new file mode 100644
index 0000000..854bc72
--- /dev/null
+++ b/node_modules/mobx-react/dist/utils/utils.d.ts
@@ -0,0 +1,15 @@
+export declare function newSymbol(name: string): symbol | string;
+export declare function shallowEqual(objA: any, objB: any): boolean;
+export declare function copyStaticProperties(base: object, target: object): void;
+/**
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+ * @param target
+ * @param prop
+ * @param value
+ */
+export declare function setHiddenProp(target: object, prop: any, value: any): void;
+export interface Mixins extends Record<string, any> {
+    locks: number;
+    methods: Array<Function>;
+}
+export declare function patch(target: object, methodName: string, mixinMethod: Function): void;
diff --git a/node_modules/mobx-react/package.json b/node_modules/mobx-react/package.json
new file mode 100644
index 0000000..02db57e
--- /dev/null
+++ b/node_modules/mobx-react/package.json
@@ -0,0 +1,103 @@
+{
+  "_from": "mobx-react",
+  "_id": "mobx-react@7.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-LZS99KFLn75VWDXPdRJhILzVQ7qLcRjQbzkK+wVs0Qg4kWw5hOI2USp7tmu+9zP9KYsVBmKyx2k/8cTTBfsymw==",
+  "_location": "/mobx-react",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "mobx-react",
+    "name": "mobx-react",
+    "escapedName": "mobx-react",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.2.1.tgz",
+  "_shasum": "e9d4c04dc63d05e1139ce773f5fee7a5b4cb7c78",
+  "_spec": "mobx-react",
+  "_where": "C:\\Users\\mikke\\Documents\\Skole NTNU 2021\\Bachler\\it2901-trdk03",
+  "author": {
+    "name": "Michel Weststrate"
+  },
+  "bugs": {
+    "url": "https://github.com/mobxjs/mobx/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "mobx-react-lite": "^3.2.0"
+  },
+  "deprecated": false,
+  "description": "React bindings for MobX. Create fully reactive components.",
+  "devDependencies": {
+    "mobx": "^6.3.4",
+    "mobx-react-lite": "^4.0.0"
+  },
+  "files": [
+    "src",
+    "dist",
+    "LICENSE",
+    "CHANGELOG.md",
+    "README.md",
+    "batching*"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/mobx"
+  },
+  "homepage": "https://mobx.js.org",
+  "jsdelivr": "dist/mobxreact.umd.production.min.js",
+  "jsnext:main": "dist/mobxreact.esm.js",
+  "keywords": [
+    "mobx",
+    "mobservable",
+    "react-component",
+    "react",
+    "reactjs",
+    "reactive"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "module": "dist/mobxreact.esm.js",
+  "name": "mobx-react",
+  "peerDependencies": {
+    "mobx": "^6.1.0",
+    "react": "^16.8.0 || ^17"
+  },
+  "peerDependenciesMeta": {
+    "react-dom": {
+      "optional": true
+    },
+    "react-native": {
+      "optional": true
+    }
+  },
+  "react-native": "dist/mobxreact.esm.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mobxjs/mobx.git"
+  },
+  "scripts": {
+    "build": "node ../../scripts/build.js mobxReact",
+    "build:test": "yarn build --target test",
+    "lint": "eslint src/**/* --ext .js,.ts,.tsx",
+    "prepublish": "yarn build --target publish",
+    "test": "jest",
+    "test:check": "yarn test:types",
+    "test:size": "yarn import-size --report . observer",
+    "test:types": "tsc --noEmit"
+  },
+  "sideEffects": false,
+  "source": "src/index.ts",
+  "types": "dist/index.d.ts",
+  "typings": "dist/index.d.ts",
+  "umd:main": "dist/mobxreact.umd.production.min.js",
+  "unpkg": "dist/mobxreact.umd.production.min.js",
+  "version": "7.2.1"
+}
diff --git a/node_modules/mobx-react/src/Provider.tsx b/node_modules/mobx-react/src/Provider.tsx
new file mode 100644
index 0000000..b40f1da
--- /dev/null
+++ b/node_modules/mobx-react/src/Provider.tsx
@@ -0,0 +1,29 @@
+import React from "react"
+import { shallowEqual } from "./utils/utils"
+import { IValueMap } from "./types/IValueMap"
+
+export const MobXProviderContext = React.createContext<IValueMap>({})
+
+export interface ProviderProps extends IValueMap {
+    children: React.ReactNode
+}
+
+export function Provider(props: ProviderProps) {
+    const { children, ...stores } = props
+    const parentValue = React.useContext(MobXProviderContext)
+    const mutableProviderRef = React.useRef({ ...parentValue, ...stores })
+    const value = mutableProviderRef.current
+
+    if (__DEV__) {
+        const newValue = { ...value, ...stores } // spread in previous state for the context based stores
+        if (!shallowEqual(value, newValue)) {
+            throw new Error(
+                "MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error."
+            )
+        }
+    }
+
+    return <MobXProviderContext.Provider value={value}>{children}</MobXProviderContext.Provider>
+}
+
+Provider.displayName = "MobXProvider"
diff --git a/node_modules/mobx-react/src/disposeOnUnmount.ts b/node_modules/mobx-react/src/disposeOnUnmount.ts
new file mode 100644
index 0000000..409273d
--- /dev/null
+++ b/node_modules/mobx-react/src/disposeOnUnmount.ts
@@ -0,0 +1,85 @@
+import React from "react"
+import { patch, newSymbol } from "./utils/utils"
+
+type Disposer = () => void
+
+const protoStoreKey = newSymbol("disposeOnUnmountProto")
+const instStoreKey = newSymbol("disposeOnUnmountInst")
+
+function runDisposersOnWillUnmount() {
+    ;[...(this[protoStoreKey] || []), ...(this[instStoreKey] || [])].forEach(propKeyOrFunction => {
+        const prop =
+            typeof propKeyOrFunction === "string" ? this[propKeyOrFunction] : propKeyOrFunction
+        if (prop !== undefined && prop !== null) {
+            if (Array.isArray(prop)) prop.map(f => f())
+            else prop()
+        }
+    })
+}
+
+export function disposeOnUnmount(target: React.Component<any, any>, propertyKey: PropertyKey): void
+export function disposeOnUnmount<TF extends Disposer | Array<Disposer>>(
+    target: React.Component<any, any>,
+    fn: TF
+): TF
+
+export function disposeOnUnmount(
+    target: React.Component<any, any>,
+    propertyKeyOrFunction: PropertyKey | Disposer | Array<Disposer>
+): PropertyKey | Disposer | Array<Disposer> | void {
+    if (Array.isArray(propertyKeyOrFunction)) {
+        return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn))
+    }
+
+    const c = Object.getPrototypeOf(target).constructor
+    const c2 = Object.getPrototypeOf(target.constructor)
+    // Special case for react-hot-loader
+    const c3 = Object.getPrototypeOf(Object.getPrototypeOf(target))
+    if (
+        !(
+            c === React.Component ||
+            c === React.PureComponent ||
+            c2 === React.Component ||
+            c2 === React.PureComponent ||
+            c3 === React.Component ||
+            c3 === React.PureComponent
+        )
+    ) {
+        throw new Error(
+            "[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent."
+        )
+    }
+
+    if (
+        typeof propertyKeyOrFunction !== "string" &&
+        typeof propertyKeyOrFunction !== "function" &&
+        !Array.isArray(propertyKeyOrFunction)
+    ) {
+        throw new Error(
+            "[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function."
+        )
+    }
+
+    // decorator's target is the prototype, so it doesn't have any instance properties like props
+    const isDecorator = typeof propertyKeyOrFunction === "string"
+
+    // add property key / function we want run (disposed) to the store
+    const componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]
+    const store = isDecorator
+        ? // decorators are added to the prototype store
+          target[protoStoreKey] || (target[protoStoreKey] = [])
+        : // functions are added to the instance store
+          target[instStoreKey] || (target[instStoreKey] = [])
+
+    store.push(propertyKeyOrFunction)
+
+    // tweak the component class componentWillUnmount if not done already
+    if (!componentWasAlreadyModified) {
+        patch(target, "componentWillUnmount", runDisposersOnWillUnmount)
+    }
+
+    // return the disposer as is if invoked as a non decorator
+    if (typeof propertyKeyOrFunction !== "string") {
+        return propertyKeyOrFunction
+    }
+}
diff --git a/node_modules/mobx-react/src/globals.d.ts b/node_modules/mobx-react/src/globals.d.ts
new file mode 100644
index 0000000..404c55f
--- /dev/null
+++ b/node_modules/mobx-react/src/globals.d.ts
@@ -0,0 +1 @@
+declare const __DEV__: boolean
diff --git a/node_modules/mobx-react/src/index.ts b/node_modules/mobx-react/src/index.ts
new file mode 100644
index 0000000..6bdd979
--- /dev/null
+++ b/node_modules/mobx-react/src/index.ts
@@ -0,0 +1,25 @@
+import { observable } from "mobx"
+import { Component } from "react"
+
+if (!Component) throw new Error("mobx-react requires React to be available")
+if (!observable) throw new Error("mobx-react requires mobx to be available")
+
+export {
+    Observer,
+    useObserver,
+    useAsObservableSource,
+    useLocalStore,
+    isUsingStaticRendering,
+    useStaticRendering,
+    enableStaticRendering,
+    observerBatching,
+    useLocalObservable
+} from "mobx-react-lite"
+
+export { observer } from "./observer"
+
+export { MobXProviderContext, Provider, ProviderProps } from "./Provider"
+export { inject } from "./inject"
+export { disposeOnUnmount } from "./disposeOnUnmount"
+export { PropTypes } from "./propTypes"
+export { IWrappedComponent } from "./types/IWrappedComponent"
diff --git a/node_modules/mobx-react/src/inject.ts b/node_modules/mobx-react/src/inject.ts
new file mode 100644
index 0000000..618b2ac
--- /dev/null
+++ b/node_modules/mobx-react/src/inject.ts
@@ -0,0 +1,104 @@
+import React from "react"
+import { observer } from "./observer"
+import { copyStaticProperties } from "./utils/utils"
+import { MobXProviderContext } from "./Provider"
+import { IReactComponent } from "./types/IReactComponent"
+import { IValueMap } from "./types/IValueMap"
+import { IWrappedComponent } from "./types/IWrappedComponent"
+import { IStoresToProps } from "./types/IStoresToProps"
+
+/**
+ * Store Injection
+ */
+function createStoreInjector(
+    grabStoresFn: IStoresToProps,
+    component: IReactComponent<any>,
+    injectNames: string,
+    makeReactive: boolean
+): IReactComponent<any> {
+    // Support forward refs
+    let Injector: IReactComponent<any> = React.forwardRef((props, ref) => {
+        const newProps = { ...props }
+        const context = React.useContext(MobXProviderContext)
+        Object.assign(newProps, grabStoresFn(context || {}, newProps) || {})
+
+        if (ref) {
+            newProps.ref = ref
+        }
+
+        return React.createElement(component, newProps)
+    })
+
+    if (makeReactive) Injector = observer(Injector)
+    Injector["isMobxInjector"] = true // assigned late to suppress observer warning
+
+    // Static fields from component should be visible on the generated Injector
+    copyStaticProperties(component, Injector)
+    Injector["wrappedComponent"] = component
+    Injector.displayName = getInjectName(component, injectNames)
+    return Injector
+}
+
+function getInjectName(component: IReactComponent<any>, injectNames: string): string {
+    let displayName
+    const componentName =
+        component.displayName ||
+        component.name ||
+        (component.constructor && component.constructor.name) ||
+        "Component"
+    if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")"
+    else displayName = "inject(" + componentName + ")"
+    return displayName
+}
+
+function grabStoresByName(
+    storeNames: Array<string>
+): (baseStores: IValueMap, nextProps: React.Props<any>) => React.PropsWithRef<any> | undefined {
+    return function (baseStores, nextProps) {
+        storeNames.forEach(function (storeName) {
+            if (
+                storeName in nextProps // prefer props over stores
+            )
+                return
+            if (!(storeName in baseStores))
+                throw new Error(
+                    "MobX injector: Store '" +
+                        storeName +
+                        "' is not available! Make sure it is provided by some Provider"
+                )
+            nextProps[storeName] = baseStores[storeName]
+        })
+        return nextProps
+    }
+}
+
+export function inject(
+    ...stores: Array<string>
+): <T extends IReactComponent<any>>(
+    target: T
+) => T & (T extends IReactComponent<infer P> ? IWrappedComponent<P> : never)
+export function inject<S, P, I, C>(
+    fn: IStoresToProps<S, P, I, C>
+): <T extends IReactComponent>(target: T) => T & IWrappedComponent<P>
+
+/**
+ * higher order component that injects stores to a child.
+ * takes either a varargs list of strings, which are stores read from the context,
+ * or a function that manually maps the available stores from the context to props:
+ * storesToProps(mobxStores, props, context) => newProps
+ */
+export function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames: Array<any>) {
+    if (typeof arguments[0] === "function") {
+        let grabStoresFn = arguments[0]
+        return (componentClass: React.ComponentClass<any, any>) =>
+            createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true)
+    } else {
+        return (componentClass: React.ComponentClass<any, any>) =>
+            createStoreInjector(
+                grabStoresByName(storeNames),
+                componentClass,
+                storeNames.join("-"),
+                false
+            )
+    }
+}
diff --git a/node_modules/mobx-react/src/observer.tsx b/node_modules/mobx-react/src/observer.tsx
new file mode 100644
index 0000000..8437373
--- /dev/null
+++ b/node_modules/mobx-react/src/observer.tsx
@@ -0,0 +1,58 @@
+import * as React from "react"
+import { observer as observerLite, Observer } from "mobx-react-lite"
+
+import { makeClassComponentObserver } from "./observerClass"
+import { IReactComponent } from "./types/IReactComponent"
+
+const hasSymbol = typeof Symbol === "function" && Symbol.for
+
+// Using react-is had some issues (and operates on elements, not on types), see #608 / #609
+const ReactForwardRefSymbol = hasSymbol
+    ? Symbol.for("react.forward_ref")
+    : typeof React.forwardRef === "function" && React.forwardRef((props: any) => null)["$$typeof"]
+
+const ReactMemoSymbol = hasSymbol
+    ? Symbol.for("react.memo")
+    : typeof React.memo === "function" && React.memo((props: any) => null)["$$typeof"]
+
+/**
+ * Observer function / decorator
+ */
+export function observer<T extends IReactComponent>(component: T): T {
+    if (component["isMobxInjector"] === true) {
+        console.warn(
+            "Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"
+        )
+    }
+
+    if (ReactMemoSymbol && component["$$typeof"] === ReactMemoSymbol) {
+        throw new Error(
+            "Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you."
+        )
+    }
+
+    // Unwrap forward refs into `<Observer>` component
+    // we need to unwrap the render, because it is the inner render that needs to be tracked,
+    // not the ForwardRef HoC
+    if (ReactForwardRefSymbol && component["$$typeof"] === ReactForwardRefSymbol) {
+        const baseRender = component["render"]
+        if (typeof baseRender !== "function")
+            throw new Error("render property of ForwardRef was not a function")
+        return React.forwardRef(function ObserverForwardRef() {
+            const args = arguments
+            return <Observer>{() => baseRender.apply(undefined, args)}</Observer>
+        }) as T
+    }
+
+    // Function component
+    if (
+        typeof component === "function" &&
+        (!component.prototype || !component.prototype.render) &&
+        !component["isReactClass"] &&
+        !Object.prototype.isPrototypeOf.call(React.Component, component)
+    ) {
+        return observerLite(component as React.StatelessComponent<any>) as T
+    }
+
+    return makeClassComponentObserver(component as React.ComponentClass<any, any>) as T
+}
diff --git a/node_modules/mobx-react/src/observerClass.ts b/node_modules/mobx-react/src/observerClass.ts
new file mode 100644
index 0000000..66bd051
--- /dev/null
+++ b/node_modules/mobx-react/src/observerClass.ts
@@ -0,0 +1,210 @@
+import { PureComponent, Component } from "react"
+import {
+    createAtom,
+    _allowStateChanges,
+    Reaction,
+    $mobx,
+    _allowStateReadsStart,
+    _allowStateReadsEnd
+} from "mobx"
+import { isUsingStaticRendering } from "mobx-react-lite"
+
+import { newSymbol, shallowEqual, setHiddenProp, patch } from "./utils/utils"
+
+const mobxAdminProperty = $mobx || "$mobx"
+const mobxObserverProperty = newSymbol("isMobXReactObserver")
+const mobxIsUnmounted = newSymbol("isUnmounted")
+const skipRenderKey = newSymbol("skipRender")
+const isForcingUpdateKey = newSymbol("isForcingUpdate")
+
+export function makeClassComponentObserver(
+    componentClass: React.ComponentClass<any, any>
+): React.ComponentClass<any, any> {
+    const target = componentClass.prototype
+
+    if (componentClass[mobxObserverProperty]) {
+        const displayName = getDisplayName(target)
+        console.warn(
+            `The provided component class (${displayName}) 
+                has already been declared as an observer component.`
+        )
+    } else {
+        componentClass[mobxObserverProperty] = true
+    }
+
+    if (target.componentWillReact)
+        throw new Error("The componentWillReact life-cycle event is no longer supported")
+    if (componentClass["__proto__"] !== PureComponent) {
+        if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU
+        else if (target.shouldComponentUpdate !== observerSCU)
+            // n.b. unequal check, instead of existence check, as @observer might be on superclass as well
+            throw new Error(
+                "It is not allowed to use shouldComponentUpdate in observer based components."
+            )
+    }
+
+    // this.props and this.state are made observable, just to make sure @computed fields that
+    // are defined inside the component, and which rely on state or props, re-compute if state or props change
+    // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)
+    // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+
+    makeObservableProp(target, "props")
+    makeObservableProp(target, "state")
+
+    const baseRender = target.render
+    if (typeof baseRender !== 'function') {
+        const displayName = getDisplayName(target)
+        throw new Error(
+            `[mobx-react] class component (${displayName}) is missing \`render\` method.`
+            + `\n\`observer\` requires \`render\` being a function defined on prototype.`
+            + `\n\`render = () => {}\` or \`render = function() {}\` is not supported.`
+        )
+    }
+    target.render = function () {
+        return makeComponentReactive.call(this, baseRender)
+    }
+    patch(target, "componentWillUnmount", function () {
+        if (isUsingStaticRendering() === true) return
+        this.render[mobxAdminProperty]?.dispose()
+        this[mobxIsUnmounted] = true
+
+        if (!this.render[mobxAdminProperty]) {
+            // Render may have been hot-swapped and/or overriden by a subclass.
+            const displayName = getDisplayName(this)
+            console.warn(
+                `The reactive render of an observer class component (${displayName}) 
+                was overriden after MobX attached. This may result in a memory leak if the 
+                overriden reactive render was not properly disposed.`
+            )
+        }
+    })
+    return componentClass
+}
+
+// Generates a friendly name for debugging
+function getDisplayName(comp: any) {
+    return (
+        comp.displayName ||
+        comp.name ||
+        (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) ||
+        "<component>"
+    )
+}
+
+function makeComponentReactive(render: any) {
+    if (isUsingStaticRendering() === true) return render.call(this)
+
+    /**
+     * If props are shallowly modified, react will render anyway,
+     * so atom.reportChanged() should not result in yet another re-render
+     */
+    setHiddenProp(this, skipRenderKey, false)
+    /**
+     * forceUpdate will re-assign this.props. We don't want that to cause a loop,
+     * so detect these changes
+     */
+    setHiddenProp(this, isForcingUpdateKey, false)
+
+    const initialName = getDisplayName(this)
+    const baseRender = render.bind(this)
+
+    let isRenderingPending = false
+
+    const reaction = new Reaction(`${initialName}.render()`, () => {
+        if (!isRenderingPending) {
+            // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js)
+            // This unidiomatic React usage but React will correctly warn about this so we continue as usual
+            // See #85 / Pull #44
+            isRenderingPending = true
+            if (this[mobxIsUnmounted] !== true) {
+                let hasError = true
+                try {
+                    setHiddenProp(this, isForcingUpdateKey, true)
+                    if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this)
+                    hasError = false
+                } finally {
+                    setHiddenProp(this, isForcingUpdateKey, false)
+                    if (hasError) reaction.dispose()
+                }
+            }
+        }
+    })
+
+    reaction["reactComponent"] = this
+    reactiveRender[mobxAdminProperty] = reaction
+    this.render = reactiveRender
+
+    function reactiveRender() {
+        isRenderingPending = false
+        let exception = undefined
+        let rendering = undefined
+        reaction.track(() => {
+            try {
+                rendering = _allowStateChanges(false, baseRender)
+            } catch (e) {
+                exception = e
+            }
+        })
+        if (exception) {
+            throw exception
+        }
+        return rendering
+    }
+
+    return reactiveRender.call(this)
+}
+
+function observerSCU(nextProps: React.Props<any>, nextState: any): boolean {
+    if (isUsingStaticRendering()) {
+        console.warn(
+            "[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."
+        )
+    }
+    // update on any state changes (as is the default)
+    if (this.state !== nextState) {
+        return true
+    }
+    // update if props are shallowly not equal, inspired by PureRenderMixin
+    // we could return just 'false' here, and avoid the `skipRender` checks etc
+    // however, it is nicer if lifecycle events are triggered like usually,
+    // so we return true here if props are shallowly modified.
+    return !shallowEqual(this.props, nextProps)
+}
+
+function makeObservableProp(target: any, propName: string): void {
+    const valueHolderKey = newSymbol(`reactProp_${propName}_valueHolder`)
+    const atomHolderKey = newSymbol(`reactProp_${propName}_atomHolder`)
+    function getAtom() {
+        if (!this[atomHolderKey]) {
+            setHiddenProp(this, atomHolderKey, createAtom("reactive " + propName))
+        }
+        return this[atomHolderKey]
+    }
+    Object.defineProperty(target, propName, {
+        configurable: true,
+        enumerable: true,
+        get: function () {
+            let prevReadState = false
+
+            if (_allowStateReadsStart && _allowStateReadsEnd) {
+                prevReadState = _allowStateReadsStart(true)
+            }
+            getAtom.call(this).reportObserved()
+
+            if (_allowStateReadsStart && _allowStateReadsEnd) {
+                _allowStateReadsEnd(prevReadState)
+            }
+
+            return this[valueHolderKey]
+        },
+        set: function set(v) {
+            if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {
+                setHiddenProp(this, valueHolderKey, v)
+                setHiddenProp(this, skipRenderKey, true)
+                getAtom.call(this).reportChanged()
+                setHiddenProp(this, skipRenderKey, false)
+            } else {
+                setHiddenProp(this, valueHolderKey, v)
+            }
+        }
+    })
+}
diff --git a/node_modules/mobx-react/src/propTypes.ts b/node_modules/mobx-react/src/propTypes.ts
new file mode 100644
index 0000000..0e6e164
--- /dev/null
+++ b/node_modules/mobx-react/src/propTypes.ts
@@ -0,0 +1,210 @@
+import { isObservableArray, isObservableObject, isObservableMap, untracked } from "mobx"
+
+// Copied from React.PropTypes
+function createChainableTypeChecker(validator: React.Validator<any>): React.Requireable<any> {
+    function checkType(
+        isRequired: boolean,
+        props: any,
+        propName: string,
+        componentName: string,
+        location: string,
+        propFullName: string,
+        ...rest: any[]
+    ) {
+        return untracked(() => {
+            componentName = componentName || "<<anonymous>>"
+            propFullName = propFullName || propName
+            if (props[propName] == null) {
+                if (isRequired) {
+                    const actual = props[propName] === null ? "null" : "undefined"
+                    return new Error(
+                        "The " +
+                            location +
+                            " `" +
+                            propFullName +
+                            "` is marked as required " +
+                            "in `" +
+                            componentName +
+                            "`, but its value is `" +
+                            actual +
+                            "`."
+                    )
+                }
+                return null
+            } else {
+                // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise
+                return validator(props, propName, componentName, location, propFullName, ...rest)
+            }
+        })
+    }
+
+    const chainedCheckType: any = checkType.bind(null, false)
+    // Add isRequired to satisfy Requirable
+    chainedCheckType.isRequired = checkType.bind(null, true)
+    return chainedCheckType
+}
+
+// Copied from React.PropTypes
+function isSymbol(propType: any, propValue: any): boolean {
+    // Native Symbol.
+    if (propType === "symbol") {
+        return true
+    }
+
+    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+    if (propValue["@@toStringTag"] === "Symbol") {
+        return true
+    }
+
+    // Fallback for non-spec compliant Symbols which are polyfilled.
+    if (typeof Symbol === "function" && propValue instanceof Symbol) {
+        return true
+    }
+
+    return false
+}
+
+// Copied from React.PropTypes
+function getPropType(propValue: any): string {
+    const propType = typeof propValue
+    if (Array.isArray(propValue)) {
+        return "array"
+    }
+    if (propValue instanceof RegExp) {
+        // Old webkits (at least until Android 4.0) return 'function' rather than
+        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+        // passes PropTypes.object.
+        return "object"
+    }
+    if (isSymbol(propType, propValue)) {
+        return "symbol"
+    }
+    return propType
+}
+
+// This handles more types than `getPropType`. Only used for error messages.
+// Copied from React.PropTypes
+function getPreciseType(propValue: any): string {
+    const propType = getPropType(propValue)
+    if (propType === "object") {
+        if (propValue instanceof Date) {
+            return "date"
+        } else if (propValue instanceof RegExp) {
+            return "regexp"
+        }
+    }
+    return propType
+}
+
+function createObservableTypeCheckerCreator(
+    allowNativeType: any,
+    mobxType: any
+): React.Requireable<any> {
+    return createChainableTypeChecker((props, propName, componentName, location, propFullName) => {
+        return untracked(() => {
+            if (allowNativeType) {
+                if (getPropType(props[propName]) === mobxType.toLowerCase()) return null
+            }
+            let mobxChecker
+            switch (mobxType) {
+                case "Array":
+                    mobxChecker = isObservableArray
+                    break
+                case "Object":
+                    mobxChecker = isObservableObject
+                    break
+                case "Map":
+                    mobxChecker = isObservableMap
+                    break
+                default:
+                    throw new Error(`Unexpected mobxType: ${mobxType}`)
+            }
+            const propValue = props[propName]
+            if (!mobxChecker(propValue)) {
+                const preciseType = getPreciseType(propValue)
+                const nativeTypeExpectationMessage = allowNativeType
+                    ? " or javascript `" + mobxType.toLowerCase() + "`"
+                    : ""
+                return new Error(
+                    "Invalid prop `" +
+                        propFullName +
+                        "` of type `" +
+                        preciseType +
+                        "` supplied to" +
+                        " `" +
+                        componentName +
+                        "`, expected `mobx.Observable" +
+                        mobxType +
+                        "`" +
+                        nativeTypeExpectationMessage +
+                        "."
+                )
+            }
+            return null
+        })
+    })
+}
+
+function createObservableArrayOfTypeChecker(
+    allowNativeType: boolean,
+    typeChecker: React.Validator<any>
+) {
+    return createChainableTypeChecker(
+        (props, propName, componentName, location, propFullName, ...rest) => {
+            return untracked(() => {
+                if (typeof typeChecker !== "function") {
+                    return new Error(
+                        "Property `" +
+                            propFullName +
+                            "` of component `" +
+                            componentName +
+                            "` has " +
+                            "invalid PropType notation."
+                    )
+                } else {
+                    let error = createObservableTypeCheckerCreator(allowNativeType, "Array")(
+                        props,
+                        propName,
+                        componentName,
+                        location,
+                        propFullName
+                    )
+
+                    if (error instanceof Error) return error
+                    const propValue = props[propName]
+                    for (let i = 0; i < propValue.length; i++) {
+                        error = (typeChecker as React.Validator<any>)(
+                            propValue,
+                            i as any,
+                            componentName,
+                            location,
+                            propFullName + "[" + i + "]",
+                            ...rest
+                        )
+                        if (error instanceof Error) return error
+                    }
+
+                    return null
+                }
+            })
+        }
+    )
+}
+
+const observableArray = createObservableTypeCheckerCreator(false, "Array")
+const observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false)
+const observableMap = createObservableTypeCheckerCreator(false, "Map")
+const observableObject = createObservableTypeCheckerCreator(false, "Object")
+const arrayOrObservableArray = createObservableTypeCheckerCreator(true, "Array")
+const arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true)
+const objectOrObservableObject = createObservableTypeCheckerCreator(true, "Object")
+
+export const PropTypes = {
+    observableArray,
+    observableArrayOf,
+    observableMap,
+    observableObject,
+    arrayOrObservableArray,
+    arrayOrObservableArrayOf,
+    objectOrObservableObject
+}
diff --git a/node_modules/mobx-react/src/types/IReactComponent.ts b/node_modules/mobx-react/src/types/IReactComponent.ts
new file mode 100644
index 0000000..f3d3323
--- /dev/null
+++ b/node_modules/mobx-react/src/types/IReactComponent.ts
@@ -0,0 +1,5 @@
+export type IReactComponent<P = any> =
+    | React.ClassicComponentClass<P>
+    | React.ComponentClass<P>
+    | React.FunctionComponent<P>
+    | React.ForwardRefExoticComponent<P>
diff --git a/node_modules/mobx-react/src/types/IStoresToProps.ts b/node_modules/mobx-react/src/types/IStoresToProps.ts
new file mode 100644
index 0000000..44a23a4
--- /dev/null
+++ b/node_modules/mobx-react/src/types/IStoresToProps.ts
@@ -0,0 +1,7 @@
+import { IValueMap } from "./IValueMap"
+export type IStoresToProps<
+    S extends IValueMap = {},
+    P extends IValueMap = {},
+    I extends IValueMap = {},
+    C extends IValueMap = {}
+> = (stores: S, nextProps: P, context?: C) => I
diff --git a/node_modules/mobx-react/src/types/IValueMap.ts b/node_modules/mobx-react/src/types/IValueMap.ts
new file mode 100644
index 0000000..f7f1ad6
--- /dev/null
+++ b/node_modules/mobx-react/src/types/IValueMap.ts
@@ -0,0 +1 @@
+export type IValueMap = Record<string, any>
diff --git a/node_modules/mobx-react/src/types/IWrappedComponent.ts b/node_modules/mobx-react/src/types/IWrappedComponent.ts
new file mode 100644
index 0000000..72abbae
--- /dev/null
+++ b/node_modules/mobx-react/src/types/IWrappedComponent.ts
@@ -0,0 +1,4 @@
+import { IReactComponent } from "./IReactComponent"
+export type IWrappedComponent<P> = {
+    wrappedComponent: IReactComponent<P>
+}
diff --git a/node_modules/mobx-react/src/utils/utils.ts b/node_modules/mobx-react/src/utils/utils.ts
new file mode 100644
index 0000000..9b7a832
--- /dev/null
+++ b/node_modules/mobx-react/src/utils/utils.ts
@@ -0,0 +1,193 @@
+let symbolId = 0
+function createSymbol(name: string): symbol | string {
+    if (typeof Symbol === "function") {
+        return Symbol(name)
+    }
+    const symbol = `__$mobx-react ${name} (${symbolId})`
+    symbolId++
+    return symbol
+}
+
+const createdSymbols = {}
+export function newSymbol(name: string): symbol | string {
+    if (!createdSymbols[name]) {
+        createdSymbols[name] = createSymbol(name)
+    }
+    return createdSymbols[name]
+}
+
+export function shallowEqual(objA: any, objB: any): boolean {
+    //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+    if (is(objA, objB)) return true
+    if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+        return false
+    }
+    const keysA = Object.keys(objA)
+    const keysB = Object.keys(objB)
+    if (keysA.length !== keysB.length) return false
+    for (let i = 0; i < keysA.length; i++) {
+        if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+            return false
+        }
+    }
+    return true
+}
+
+function is(x: any, y: any): boolean {
+    // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+    if (x === y) {
+        return x !== 0 || 1 / x === 1 / y
+    } else {
+        return x !== x && y !== y
+    }
+}
+
+// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js
+const hoistBlackList = {
+    $$typeof: 1,
+    render: 1,
+    compare: 1,
+    type: 1,
+    childContextTypes: 1,
+    contextType: 1,
+    contextTypes: 1,
+    defaultProps: 1,
+    getDefaultProps: 1,
+    getDerivedStateFromError: 1,
+    getDerivedStateFromProps: 1,
+    mixins: 1,
+    displayName: 1,
+    propTypes: 1
+}
+
+export function copyStaticProperties(base: object, target: object): void {
+    const protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base))
+    Object.getOwnPropertyNames(base).forEach(key => {
+        if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)!)
+        }
+    })
+}
+
+/**
+ * Helper to set `prop` to `this` as non-enumerable (hidden prop)
+ * @param target
+ * @param prop
+ * @param value
+ */
+export function setHiddenProp(target: object, prop: any, value: any): void {
+    if (!Object.hasOwnProperty.call(target, prop)) {
+        Object.defineProperty(target, prop, {
+            enumerable: false,
+            configurable: true,
+            writable: true,
+            value
+        })
+    } else {
+        target[prop] = value
+    }
+}
+
+/**
+ * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks
+ * and the handler provided by mobx-react
+ */
+const mobxMixins = newSymbol("patchMixins")
+const mobxPatchedDefinition = newSymbol("patchedDefinition")
+
+export interface Mixins extends Record<string, any> {
+    locks: number
+    methods: Array<Function>
+}
+
+function getMixins(target: object, methodName: string): Mixins {
+    const mixins = (target[mobxMixins] = target[mobxMixins] || {})
+    const methodMixins = (mixins[methodName] = mixins[methodName] || {})
+    methodMixins.locks = methodMixins.locks || 0
+    methodMixins.methods = methodMixins.methods || []
+    return methodMixins
+}
+
+function wrapper(realMethod: Function, mixins: Mixins, ...args: Array<any>) {
+    // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls
+    mixins.locks++
+
+    try {
+        let retVal
+        if (realMethod !== undefined && realMethod !== null) {
+            retVal = realMethod.apply(this, args)
+        }
+
+        return retVal
+    } finally {
+        mixins.locks--
+        if (mixins.locks === 0) {
+            mixins.methods.forEach(mx => {
+                mx.apply(this, args)
+            })
+        }
+    }
+}
+
+function wrapFunction(realMethod: Function, mixins: Mixins): (...args: Array<any>) => any {
+    const fn = function (...args: Array<any>) {
+        wrapper.call(this, realMethod, mixins, ...args)
+    }
+    return fn
+}
+
+export function patch(target: object, methodName: string, mixinMethod: Function): void {
+    const mixins = getMixins(target, methodName)
+
+    if (mixins.methods.indexOf(mixinMethod) < 0) {
+        mixins.methods.push(mixinMethod)
+    }
+
+    const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName)
+    if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {
+        // already patched definition, do not repatch
+        return
+    }
+
+    const originalMethod = target[methodName]
+    const newDefinition = createDefinition(
+        target,
+        methodName,
+        oldDefinition ? oldDefinition.enumerable : undefined,
+        mixins,
+        originalMethod
+    )
+
+    Object.defineProperty(target, methodName, newDefinition)
+}
+
+function createDefinition(
+    target: object,
+    methodName: string,
+    enumerable: any,
+    mixins: Mixins,
+    originalMethod: Function
+): PropertyDescriptor {
+    let wrappedFunc = wrapFunction(originalMethod, mixins)
+
+    return {
+        [mobxPatchedDefinition]: true,
+        get: function () {
+            return wrappedFunc
+        },
+        set: function (value) {
+            if (this === target) {
+                wrappedFunc = wrapFunction(value, mixins)
+            } else {
+                // when it is an instance of the prototype/a child prototype patch that particular case again separately
+                // since we need to store separate values depending on wether it is the actual instance, the prototype, etc
+                // e.g. the method for super might not be the same as the method for the prototype which might be not the same
+                // as the method for the instance
+                const newDefinition = createDefinition(this, methodName, enumerable, mixins, value)
+                Object.defineProperty(this, methodName, newDefinition)
+            }
+        },
+        configurable: true,
+        enumerable: enumerable
+    }
+}
diff --git a/package-lock.json b/package-lock.json
index 7fcc8bf..096c0d2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,6 @@
       "version": "7.17.2",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz",
       "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==",
-      "dev": true,
       "requires": {
         "regenerator-runtime": "^0.13.4"
       }
@@ -15,16 +14,27 @@
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz",
       "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==",
-      "dev": true,
       "requires": {
         "@babel/runtime": "^7.7.6"
       }
     },
+    "mobx-react": {
+      "version": "7.2.1",
+      "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.2.1.tgz",
+      "integrity": "sha512-LZS99KFLn75VWDXPdRJhILzVQ7qLcRjQbzkK+wVs0Qg4kWw5hOI2USp7tmu+9zP9KYsVBmKyx2k/8cTTBfsymw==",
+      "requires": {
+        "mobx-react-lite": "^3.2.0"
+      }
+    },
+    "mobx-react-lite": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz",
+      "integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw=="
+    },
     "react-router": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz",
       "integrity": "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg==",
-      "dev": true,
       "requires": {
         "history": "^5.2.0"
       }
@@ -33,7 +43,6 @@
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz",
       "integrity": "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA==",
-      "dev": true,
       "requires": {
         "history": "^5.2.0",
         "react-router": "6.2.1"
@@ -42,8 +51,7 @@
     "regenerator-runtime": {
       "version": "0.13.9",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-      "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
-      "dev": true
+      "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
     }
   }
 }
-- 
GitLab


From 52df219bdf597752177dcf2736da9cb18685ce95 Mon Sep 17 00:00:00 2001
From: Einar <einarkp@gmail.com>
Date: Sat, 19 Feb 2022 15:48:28 +0100
Subject: [PATCH 3/6] add(#22): id query param for main page

---
 frontend/components/Nav.tsx      |  2 +-
 frontend/pages/totalOversikt.tsx | 12 +++++++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/frontend/components/Nav.tsx b/frontend/components/Nav.tsx
index fb0effb..02f89fe 100644
--- a/frontend/components/Nav.tsx
+++ b/frontend/components/Nav.tsx
@@ -18,7 +18,7 @@ const Header: React.FC = () => {
       </div>
       <ul>
         <li>
-          <Link href='/totalOversikt'> Totaloversikt </Link>
+          <Link  href={{ pathname: '/totalOversikt', query: { id: '' } }}> Totaloversikt </Link>
         </li>
         <li>
           <Link href='/prognoser'> Prognoser </Link>
diff --git a/frontend/pages/totalOversikt.tsx b/frontend/pages/totalOversikt.tsx
index 50889c1..76487e6 100644
--- a/frontend/pages/totalOversikt.tsx
+++ b/frontend/pages/totalOversikt.tsx
@@ -1,8 +1,18 @@
-import React from 'react'
+import React, { useEffect } from 'react'
 import GraphContainer from '../components/GraphContainer'
 import { Budget } from '../Interfaces';
+import { useRouter } from 'next/router'
 
 export default function TotalOversikt() {
+
+  const router = useRouter()
+  const schoolIdQueryParam = router.query.id
+  console.log(schoolIdQueryParam)
+
+  useEffect(() => {
+    // TODO: Get data for specified school, id is part of URL query param "id", saved in schoolIdQueryParam.
+  });
+
   return (
     <GraphContainer data={dummyData} />
   )
-- 
GitLab


From cf97652c19a0e5ca58bb5f28de8e5a6f074e798b Mon Sep 17 00:00:00 2001
From: "DESKTOP-J7QTMBR\\mikke" <mikkel.marsteinvikenfiber.no>
Date: Tue, 22 Feb 2022 17:55:40 +0100
Subject: [PATCH 4/6] #14 get adress function

---
 frontend/utils/APIUtils.ts | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/frontend/utils/APIUtils.ts b/frontend/utils/APIUtils.ts
index b0e1579..f170e50 100644
--- a/frontend/utils/APIUtils.ts
+++ b/frontend/utils/APIUtils.ts
@@ -1,6 +1,9 @@
 import axios, { AxiosResponse } from 'axios';
 import { URL, PORT } from '../Constants';
 
+const getAdress = () =>  {
+  return URL+':'+PORT+'/';
+}
 
 /**
  * intern funskjon som bruker axios sin .get() til å gjøre
@@ -9,7 +12,7 @@ import { URL, PORT } from '../Constants';
  * @returns svar fra API-et i json format
  */
  export async function getData(endpoint: string = ''): Promise<any> {
-  const response = await axios.get(URL+':'+PORT+'/'+endpoint)
+  const response = await axios.get(getAdress()+endpoint)
   .then((data: AxiosResponse) => {
     return data;
   })
@@ -31,7 +34,7 @@ interface LoginDetails {
  * @returns svar fra API-et i form av true false
  */
 export async function loginRequest(dataBody: {}): Promise<LoginDetails> {
-  return await axios.post(URL+':'+PORT+'/login', dataBody)
+  return await axios.post(getAdress()+'login', dataBody)
     .then((response: AxiosResponse) => {
       return response.data;
     })
-- 
GitLab


From b99d47f3e52a9e699fc44c21360d022a0ed926d5 Mon Sep 17 00:00:00 2001
From: "DESKTOP-J7QTMBR\\mikke" <mikkel.marsteinvikenfiber.no>
Date: Thu, 24 Feb 2022 23:12:56 +0100
Subject: [PATCH 5/6] #5 replaced mobx with localstorage for storeing tokens

---
 frontend/Interfaces.ts                  |   5 +-
 frontend/components/LoginForm.tsx       |  19 +--
 frontend/components/Nav.tsx             |   1 -
 frontend/helpers/ObservableUserStore.ts |  28 ----
 frontend/package-lock.json              | 174 ------------------------
 frontend/utils/APIUtils.ts              |  10 +-
 frontend/utils/Helpers.ts               |  15 ++
 7 files changed, 28 insertions(+), 224 deletions(-)
 delete mode 100644 frontend/helpers/ObservableUserStore.ts
 create mode 100644 frontend/utils/Helpers.ts

diff --git a/frontend/Interfaces.ts b/frontend/Interfaces.ts
index 71b8cb8..b00d7ae 100644
--- a/frontend/Interfaces.ts
+++ b/frontend/Interfaces.ts
@@ -4,7 +4,10 @@ export interface Budget {
   amount: number | null;
   prediction: number | null; 
 }
-
+export interface LoginDetails {
+  user?: string,
+  token?: string,
+};
 export type TotalBudgetData = {
   school: number;
   date: Date;
diff --git a/frontend/components/LoginForm.tsx b/frontend/components/LoginForm.tsx
index 9558ccc..455662f 100644
--- a/frontend/components/LoginForm.tsx
+++ b/frontend/components/LoginForm.tsx
@@ -1,34 +1,27 @@
-import React, { useContext } from 'react'
+import React from 'react'
 import { Formik, Field, Form } from 'formik'
-import { TextField } from '@navikt/ds-react';
 import formStyles from '../styles/LoginForm.module.css'
 import { loginRequest } from '../utils/APIUtils';
-import { StoreContext } from '../pages/_app';
+import { handleLogin } from '../utils/Helpers';
 
 export default function LoginForm() {
-    const store = useContext(StoreContext)
-    const dummyRespone = {schoolID: 123, token: "TOKEN@KEYAUTH", successful: true } //remove when backend is ready
   return (
     <Formik
             initialValues={{
                 username: '',
                 password: '',
             }}
-
             onSubmit={async (values) => {
                 await loginRequest(JSON.stringify(values, null, 2))
                     .then((response) => {
-                        response = dummyRespone; //remove when backend is ready
-                        if(response.successful){
-                            store.setActiveUser({username: values.username, schoolID: response.schoolID!, token: response.token!});
+                        if(response){
+                            handleLogin(response)
                         }else{
-                            alert("failed to log in")
+                            alert("failed to logg in")
                         }
                     })
-
             }}
-        >
-            
+        > 
             <Form>
                 <Field name="email" type="email" placeholder="Epost" className={formStyles.field} />
                 <Field name="password" type="password" placeholder="Passord" className={formStyles.field} />
diff --git a/frontend/components/Nav.tsx b/frontend/components/Nav.tsx
index 02f89fe..1797354 100644
--- a/frontend/components/Nav.tsx
+++ b/frontend/components/Nav.tsx
@@ -4,7 +4,6 @@ import Image from 'next/image'
 import { People } from "@navikt/ds-icons";
 import logoImg from '../images/logo.jpg'
 import styles from '../styles/Nav.module.css';
-//import { Observer } from 'mobx-react-lite'
 import { StoreContext } from '../pages/_app';
 
 
diff --git a/frontend/helpers/ObservableUserStore.ts b/frontend/helpers/ObservableUserStore.ts
deleted file mode 100644
index 4f73955..0000000
--- a/frontend/helpers/ObservableUserStore.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { makeObservable, observable, computed, action, autorun } from "mobx";
-import { User } from "../Interfaces";
-
-class ObservableUserStore {
-  activeUser: User | null = null;
-
-  constructor() {
-    makeObservable(this, {
-      activeUser: observable,
-      loggedIn: computed,
-      setActiveUser: action,
-    });
-    autorun(() => console.log(this.activeUser));
-  }
-  get loggedIn() {
-    if(this.activeUser){
-      return true
-    }
-    return false
-  }
-
-  setActiveUser(newUser: User | null) {
-    this.activeUser = newUser;
-  }
-}
-
-const userStore = new ObservableUserStore();
-export default userStore;
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index cc068b7..0f3466f 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -557,14 +557,6 @@
       "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
       "dev": true
     },
-    "axios": {
-      "version": "0.26.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
-      "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
-      "requires": {
-        "follow-redirects": "^1.14.8"
-      }
-    },
     "axobject-query": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
@@ -1299,11 +1291,6 @@
       "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
       "dev": true
     },
-    "follow-redirects": {
-      "version": "1.14.8",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
-      "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA=="
-    },
     "formik": {
       "version": "2.2.9",
       "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
@@ -1868,16 +1855,6 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
-    "mobx": {
-      "version": "6.3.13",
-      "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.13.tgz",
-      "integrity": "sha512-zDDKDhYUk9QCHQUdLG+wb4Jv/nXutSLt/P8kkwHyjdbrJO4OZS6QTEsrOnrKM39puqXSrJZHdB6+yRys2NBFFA=="
-    },
-    "mobx-react-lite": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz",
-      "integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw=="
-    },
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -2424,157 +2401,6 @@
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
       "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
     },
-    "source-map-loader": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz",
-      "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==",
-      "requires": {
-        "abab": "^2.0.5",
-        "iconv-lite": "^0.6.3",
-        "source-map-js": "^1.0.1"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
-        }
-      }
-    },
-    "source-map-resolve": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
-      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
-      "requires": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0"
-      }
-    },
-    "source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
-      "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw=="
-    },
-    "sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
-    },
-    "spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-      "requires": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      }
-    },
-    "spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-      "requires": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      }
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "stable": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
-    },
-    "stack-utils": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
-      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
-      "requires": {
-        "escape-string-regexp": "^2.0.0"
-      },
-      "dependencies": {
-        "escape-string-regexp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
-        }
-      }
-    },
-    "stackframe": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz",
-      "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA=="
-    },
-    "statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-    },
-    "stream-transform": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.0.4.tgz",
-      "integrity": "sha512-g2jbk1hs3GiF3oHZLbR7Fph/PXh/3xHoz/D8aR2oHySE4xVUvNeTGqihhb1vxFjYyu4inqiTfT42g2MHBjjx0g=="
-    },
-    "string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
-      "requires": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
-      }
-    },
-    "string-natural-compare": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
-      "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw=="
-    },
-    "string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "requires": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "dependencies": {
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
-        }
-      }
-    },
     "string.prototype.matchall": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
diff --git a/frontend/utils/APIUtils.ts b/frontend/utils/APIUtils.ts
index f170e50..132115e 100644
--- a/frontend/utils/APIUtils.ts
+++ b/frontend/utils/APIUtils.ts
@@ -1,5 +1,7 @@
 import axios, { AxiosResponse } from 'axios';
 import { URL, PORT } from '../Constants';
+import { LoginDetails } from '../Interfaces';
+import { createHeader } from './Helpers';
 
 const getAdress = () =>  {
   return URL+':'+PORT+'/';
@@ -22,11 +24,6 @@ const getAdress = () =>  {
   return response 
 }
 
-interface LoginDetails {
-  successful: boolean,
-  token: string | null,
-  schoolID: number | null,
-}
 /**
  * funskjon som bruker axios sin .post() til å 
  * sende en login forespørsel
@@ -34,12 +31,11 @@ interface LoginDetails {
  * @returns svar fra API-et i form av true false
  */
 export async function loginRequest(dataBody: {}): Promise<LoginDetails> {
-  return await axios.post(getAdress()+'login', dataBody)
+  return await axios.post(getAdress()+'login', dataBody, createHeader())
     .then((response: AxiosResponse) => {
       return response.data;
     })
     .catch(error => {
       console.error('There was an error!', error);
-      return {successful: false}
   });
 }
\ No newline at end of file
diff --git a/frontend/utils/Helpers.ts b/frontend/utils/Helpers.ts
new file mode 100644
index 0000000..66f2ccb
--- /dev/null
+++ b/frontend/utils/Helpers.ts
@@ -0,0 +1,15 @@
+import { LoginDetails } from "../Interfaces"
+
+export const handleLogin = (details: LoginDetails) => {
+  localStorage.setItem("token", details.token ? details.token : "")
+  localStorage.setItem("user", details.user ? details.user : "")
+}
+export const createHeader = () => {
+  const config = {
+    headers: {
+      'Content-Type': 'application/json',
+      'Authorization': `Token ${localStorage.getItem("token")}`,
+    }
+  }
+  return config;
+}
\ No newline at end of file
-- 
GitLab


From c20f0a630889a47f64f7281e4a33462fbfd11502 Mon Sep 17 00:00:00 2001
From: "DESKTOP-J7QTMBR\\mikke" <mikkel.marsteinvikenfiber.no>
Date: Thu, 24 Feb 2022 23:13:09 +0100
Subject: [PATCH 6/6] #5 removed mobx

---
 frontend/components/Nav.tsx | 3 ---
 frontend/pages/_app.tsx     | 5 -----
 2 files changed, 8 deletions(-)

diff --git a/frontend/components/Nav.tsx b/frontend/components/Nav.tsx
index 1797354..554e0d5 100644
--- a/frontend/components/Nav.tsx
+++ b/frontend/components/Nav.tsx
@@ -4,12 +4,10 @@ import Image from 'next/image'
 import { People } from "@navikt/ds-icons";
 import logoImg from '../images/logo.jpg'
 import styles from '../styles/Nav.module.css';
-import { StoreContext } from '../pages/_app';
 
 
 const Header: React.FC = () => {
   
-  const store = useContext(StoreContext)
   return (
     <nav className={styles.nav}>
       <div className={styles.logo}>
@@ -26,7 +24,6 @@ const Header: React.FC = () => {
           <Link href='/minskole'> Min skole </Link>
         </li>
         <li>
-        {store.loggedIn ? <h1 style={{color: "green"}}>Welcome</h1> : <h1 style={{color: "red"}}>Login</h1>}
           <Link href='/login'> 
           <People color="black" className={styles.peopleIcon}/>
           </Link>  
diff --git a/frontend/pages/_app.tsx b/frontend/pages/_app.tsx
index 57359b8..d36c55c 100644
--- a/frontend/pages/_app.tsx
+++ b/frontend/pages/_app.tsx
@@ -2,17 +2,12 @@ import React from 'react';
 import Layout from '../components/Layout'
 import '../styles/globals.css'
 import type { AppProps } from 'next/app'
-import ObservableUserStore from '../helpers/ObservableUserStore';
-
-export const StoreContext = React.createContext(ObservableUserStore);
 
 function MyApp({ Component, pageProps }: AppProps) {
   return ( 
-    <StoreContext.Provider value={ObservableUserStore}>
       <Layout>
         <Component {...pageProps} />
       </Layout>
-    </StoreContext.Provider >
     )
 }
 
-- 
GitLab