From 6d4dd5a7a33cd32fa6aef37f150ec7b16eead1a4 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Sat, 16 Nov 2024 06:38:57 +0100 Subject: [PATCH 01/21] feat: init vite project --- .gitignore | 46 +- config-overrides.js | 10 - eslint.config.js | 28 + index.html | 13 + package-lock.json | 22248 ++-------------- package.json | 71 +- postcss.config.js | 6 + public/GIPs/GIP-1.yml | 82 - public/GIPs/GIP-10.yml | 60 - public/GIPs/GIP-100.yml | 122 - public/GIPs/GIP-101.yml | 142 - public/GIPs/GIP-102.yml | 196 - public/GIPs/GIP-103.yml | 67 - public/GIPs/GIP-104.yml | 302 - public/GIPs/GIP-105.yml | 145 - public/GIPs/GIP-106.yml | 72 - public/GIPs/GIP-107.yml | 44 - public/GIPs/GIP-108.yml | 190 - public/GIPs/GIP-109.yml | 38 - public/GIPs/GIP-11.yml | 132 - public/GIPs/GIP-110-redo0.yml | 82 - public/GIPs/GIP-110.yml | 112 - public/GIPs/GIP-111.yml | 190 - public/GIPs/GIP-112.yml | 107 - public/GIPs/GIP-113.yml | 129 - public/GIPs/GIP-114.yml | 84 - public/GIPs/GIP-115.yml | 124 - public/GIPs/GIP-12.yml | 46 - public/GIPs/GIP-13.yml | 120 - public/GIPs/GIP-14.yml | 120 - public/GIPs/GIP-15.yml | 81 - public/GIPs/GIP-16.yml | 42 - public/GIPs/GIP-17.yml | 29 - public/GIPs/GIP-18.yml | 38 - public/GIPs/GIP-19.yml | 29 - public/GIPs/GIP-2.yml | 127 - public/GIPs/GIP-20.yml | 31 - public/GIPs/GIP-21.yml | 34 - public/GIPs/GIP-22.yml | 32 - public/GIPs/GIP-23-redo0.yml | 32 - public/GIPs/GIP-23.yml | 32 - public/GIPs/GIP-24.yml | 30 - public/GIPs/GIP-25.yml | 30 - public/GIPs/GIP-26.yml | 60 - public/GIPs/GIP-27-redo0.yml | 33 - public/GIPs/GIP-27.yml | 28 - public/GIPs/GIP-28.yml | 38 - public/GIPs/GIP-29-redo0.yml | 26 - public/GIPs/GIP-29.yml | 41 - public/GIPs/GIP-3.yml | 36 - public/GIPs/GIP-30.yml | 37 - public/GIPs/GIP-31.yml | 29 - public/GIPs/GIP-32.yml | 53 - public/GIPs/GIP-33.yml | 29 - public/GIPs/GIP-34.yml | 30 - public/GIPs/GIP-35.yml | 31 - public/GIPs/GIP-36.yml | 34 - public/GIPs/GIP-37.yml | 31 - public/GIPs/GIP-38.yml | 36 - public/GIPs/GIP-39.yml | 31 - public/GIPs/GIP-40.yml | 39 - public/GIPs/GIP-41.yml | 27 - public/GIPs/GIP-42.yml | 46 - public/GIPs/GIP-44.yml | 35 - public/GIPs/GIP-45.yml | 31 - public/GIPs/GIP-46.yml | 29 - public/GIPs/GIP-47.yml | 29 - public/GIPs/GIP-48.yml | 30 - public/GIPs/GIP-49.yml | 48 - public/GIPs/GIP-5.yml | 55 - public/GIPs/GIP-50.yml | 43 - public/GIPs/GIP-51.yml | 36 - public/GIPs/GIP-52.yml | 36 - public/GIPs/GIP-53.yml | 69 - public/GIPs/GIP-54.yml | 134 - public/GIPs/GIP-55.yml | 44 - public/GIPs/GIP-56.yml | 93 - public/GIPs/GIP-57.yml | 151 - public/GIPs/GIP-58.yml | 46 - public/GIPs/GIP-59.yml | 180 - public/GIPs/GIP-6.yml | 104 - public/GIPs/GIP-60.yml | 70 - public/GIPs/GIP-61.yml | 201 - public/GIPs/GIP-62.yml | 239 - public/GIPs/GIP-63.yml | 172 - public/GIPs/GIP-64.yml | 62 - public/GIPs/GIP-65.yml | 226 - public/GIPs/GIP-66.yml | 41 - public/GIPs/GIP-67.yml | 170 - public/GIPs/GIP-68.yml | 146 - public/GIPs/GIP-69.yml | 91 - public/GIPs/GIP-7.yml | 115 - public/GIPs/GIP-70.yml | 37 - public/GIPs/GIP-71.yml | 49 - public/GIPs/GIP-72.yml | 133 - public/GIPs/GIP-73.yml | 50 - public/GIPs/GIP-74-redo0.yml | 29 - public/GIPs/GIP-74.yml | 66 - public/GIPs/GIP-75.yml | 87 - public/GIPs/GIP-76.yml | 59 - public/GIPs/GIP-77.yml | 87 - public/GIPs/GIP-78.yml | 136 - public/GIPs/GIP-79.yml | 79 - public/GIPs/GIP-8.yml | 77 - public/GIPs/GIP-80.yml | 176 - public/GIPs/GIP-81.yml | 62 - public/GIPs/GIP-82.yml | 173 - public/GIPs/GIP-83.yml | 109 - public/GIPs/GIP-84.yml | 104 - public/GIPs/GIP-85.yml | 85 - public/GIPs/GIP-86.yml | 57 - public/GIPs/GIP-87-redo0.yml | 75 - public/GIPs/GIP-87.yml | 32 - public/GIPs/GIP-88.yml | 206 - public/GIPs/GIP-89.yml | 156 - public/GIPs/GIP-9.yml | 106 - public/GIPs/GIP-90.yml | 63 - public/GIPs/GIP-91.yml | 141 - public/GIPs/GIP-92.yml | 158 - public/GIPs/GIP-93.yml | 128 - public/GIPs/GIP-94.yml | 191 - public/GIPs/GIP-95.yml | 34 - public/GIPs/GIP-96.yml | 40 - public/GIPs/GIP-97.yml | 69 - public/GIPs/GIP-98.yml | 54 - public/GIPs/GIP-99.yml | 171 - public/GIPs/GIP-None-unknown.yml | 64 - public/favicon.ico | Bin 3870 -> 0 bytes public/index.html | 43 - public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/manifest.json | 25 - public/robots.txt | 3 - public/vite.svg | 1 + src/App.css | 229 - src/App.js | 65 - src/App.tsx | 28 + .../fonts/Unica77LLWeb-Bold.woff2 | Bin .../fonts/Unica77LLWeb-Italic.woff2 | Bin .../fonts/Unica77LLWeb-Regular.woff2 | Bin .../fonts/Unica77MonoLLWeb-Regular.woff2 | Bin src/assets/react.svg | 1 + src/components/DynamicChart.jsx | 222 - src/components/ENSAuthorDisplay.jsx | 51 - src/components/GIPStats.jsx | 305 - src/components/GIPTable.jsx | 314 - src/fonts/ABCMaxiRoundVariable.ttf | Bin 412288 -> 0 bytes src/generateYmal.js | 42 - src/index.css | 390 +- src/index.js | 16 - src/logo.svg | 1 - src/main.tsx | 10 + src/reportWebVitals.js | 13 - src/scripts/.env.test | 1 - src/scripts/requirements.txt | 6 - src/scripts/setup_environment.sh | 22 - src/scripts/snapshot_crawler.py | 455 - src/vite-env.d.ts | 1 + tailwind.config.js | 16 + tsconfig.app.json | 26 + tsconfig.json | 7 + tsconfig.node.json | 24 + vite.config.ts | 7 + 163 files changed, 3056 insertions(+), 31747 deletions(-) delete mode 100644 config-overrides.js create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 postcss.config.js delete mode 100644 public/GIPs/GIP-1.yml delete mode 100644 public/GIPs/GIP-10.yml delete mode 100644 public/GIPs/GIP-100.yml delete mode 100644 public/GIPs/GIP-101.yml delete mode 100644 public/GIPs/GIP-102.yml delete mode 100644 public/GIPs/GIP-103.yml delete mode 100644 public/GIPs/GIP-104.yml delete mode 100644 public/GIPs/GIP-105.yml delete mode 100644 public/GIPs/GIP-106.yml delete mode 100644 public/GIPs/GIP-107.yml delete mode 100644 public/GIPs/GIP-108.yml delete mode 100644 public/GIPs/GIP-109.yml delete mode 100644 public/GIPs/GIP-11.yml delete mode 100644 public/GIPs/GIP-110-redo0.yml delete mode 100644 public/GIPs/GIP-110.yml delete mode 100644 public/GIPs/GIP-111.yml delete mode 100644 public/GIPs/GIP-112.yml delete mode 100644 public/GIPs/GIP-113.yml delete mode 100644 public/GIPs/GIP-114.yml delete mode 100644 public/GIPs/GIP-115.yml delete mode 100644 public/GIPs/GIP-12.yml delete mode 100644 public/GIPs/GIP-13.yml delete mode 100644 public/GIPs/GIP-14.yml delete mode 100644 public/GIPs/GIP-15.yml delete mode 100644 public/GIPs/GIP-16.yml delete mode 100644 public/GIPs/GIP-17.yml delete mode 100644 public/GIPs/GIP-18.yml delete mode 100644 public/GIPs/GIP-19.yml delete mode 100644 public/GIPs/GIP-2.yml delete mode 100644 public/GIPs/GIP-20.yml delete mode 100644 public/GIPs/GIP-21.yml delete mode 100644 public/GIPs/GIP-22.yml delete mode 100644 public/GIPs/GIP-23-redo0.yml delete mode 100644 public/GIPs/GIP-23.yml delete mode 100644 public/GIPs/GIP-24.yml delete mode 100644 public/GIPs/GIP-25.yml delete mode 100644 public/GIPs/GIP-26.yml delete mode 100644 public/GIPs/GIP-27-redo0.yml delete mode 100644 public/GIPs/GIP-27.yml delete mode 100644 public/GIPs/GIP-28.yml delete mode 100644 public/GIPs/GIP-29-redo0.yml delete mode 100644 public/GIPs/GIP-29.yml delete mode 100644 public/GIPs/GIP-3.yml delete mode 100644 public/GIPs/GIP-30.yml delete mode 100644 public/GIPs/GIP-31.yml delete mode 100644 public/GIPs/GIP-32.yml delete mode 100644 public/GIPs/GIP-33.yml delete mode 100644 public/GIPs/GIP-34.yml delete mode 100644 public/GIPs/GIP-35.yml delete mode 100644 public/GIPs/GIP-36.yml delete mode 100644 public/GIPs/GIP-37.yml delete mode 100644 public/GIPs/GIP-38.yml delete mode 100644 public/GIPs/GIP-39.yml delete mode 100644 public/GIPs/GIP-40.yml delete mode 100644 public/GIPs/GIP-41.yml delete mode 100644 public/GIPs/GIP-42.yml delete mode 100644 public/GIPs/GIP-44.yml delete mode 100644 public/GIPs/GIP-45.yml delete mode 100644 public/GIPs/GIP-46.yml delete mode 100644 public/GIPs/GIP-47.yml delete mode 100644 public/GIPs/GIP-48.yml delete mode 100644 public/GIPs/GIP-49.yml delete mode 100644 public/GIPs/GIP-5.yml delete mode 100644 public/GIPs/GIP-50.yml delete mode 100644 public/GIPs/GIP-51.yml delete mode 100644 public/GIPs/GIP-52.yml delete mode 100644 public/GIPs/GIP-53.yml delete mode 100644 public/GIPs/GIP-54.yml delete mode 100644 public/GIPs/GIP-55.yml delete mode 100644 public/GIPs/GIP-56.yml delete mode 100644 public/GIPs/GIP-57.yml delete mode 100644 public/GIPs/GIP-58.yml delete mode 100644 public/GIPs/GIP-59.yml delete mode 100644 public/GIPs/GIP-6.yml delete mode 100644 public/GIPs/GIP-60.yml delete mode 100644 public/GIPs/GIP-61.yml delete mode 100644 public/GIPs/GIP-62.yml delete mode 100644 public/GIPs/GIP-63.yml delete mode 100644 public/GIPs/GIP-64.yml delete mode 100644 public/GIPs/GIP-65.yml delete mode 100644 public/GIPs/GIP-66.yml delete mode 100644 public/GIPs/GIP-67.yml delete mode 100644 public/GIPs/GIP-68.yml delete mode 100644 public/GIPs/GIP-69.yml delete mode 100644 public/GIPs/GIP-7.yml delete mode 100644 public/GIPs/GIP-70.yml delete mode 100644 public/GIPs/GIP-71.yml delete mode 100644 public/GIPs/GIP-72.yml delete mode 100644 public/GIPs/GIP-73.yml delete mode 100644 public/GIPs/GIP-74-redo0.yml delete mode 100644 public/GIPs/GIP-74.yml delete mode 100644 public/GIPs/GIP-75.yml delete mode 100644 public/GIPs/GIP-76.yml delete mode 100644 public/GIPs/GIP-77.yml delete mode 100644 public/GIPs/GIP-78.yml delete mode 100644 public/GIPs/GIP-79.yml delete mode 100644 public/GIPs/GIP-8.yml delete mode 100644 public/GIPs/GIP-80.yml delete mode 100644 public/GIPs/GIP-81.yml delete mode 100644 public/GIPs/GIP-82.yml delete mode 100644 public/GIPs/GIP-83.yml delete mode 100644 public/GIPs/GIP-84.yml delete mode 100644 public/GIPs/GIP-85.yml delete mode 100644 public/GIPs/GIP-86.yml delete mode 100644 public/GIPs/GIP-87-redo0.yml delete mode 100644 public/GIPs/GIP-87.yml delete mode 100644 public/GIPs/GIP-88.yml delete mode 100644 public/GIPs/GIP-89.yml delete mode 100644 public/GIPs/GIP-9.yml delete mode 100644 public/GIPs/GIP-90.yml delete mode 100644 public/GIPs/GIP-91.yml delete mode 100644 public/GIPs/GIP-92.yml delete mode 100644 public/GIPs/GIP-93.yml delete mode 100644 public/GIPs/GIP-94.yml delete mode 100644 public/GIPs/GIP-95.yml delete mode 100644 public/GIPs/GIP-96.yml delete mode 100644 public/GIPs/GIP-97.yml delete mode 100644 public/GIPs/GIP-98.yml delete mode 100644 public/GIPs/GIP-99.yml delete mode 100644 public/GIPs/GIP-None-unknown.yml delete mode 100644 public/favicon.ico delete mode 100644 public/index.html delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png delete mode 100644 public/manifest.json delete mode 100644 public/robots.txt create mode 100644 public/vite.svg delete mode 100644 src/App.js create mode 100644 src/App.tsx rename src/{ => assets}/fonts/Unica77LLWeb-Bold.woff2 (100%) rename src/{ => assets}/fonts/Unica77LLWeb-Italic.woff2 (100%) rename src/{ => assets}/fonts/Unica77LLWeb-Regular.woff2 (100%) rename src/{ => assets}/fonts/Unica77MonoLLWeb-Regular.woff2 (100%) create mode 100644 src/assets/react.svg delete mode 100644 src/components/DynamicChart.jsx delete mode 100644 src/components/ENSAuthorDisplay.jsx delete mode 100644 src/components/GIPStats.jsx delete mode 100644 src/components/GIPTable.jsx delete mode 100644 src/fonts/ABCMaxiRoundVariable.ttf delete mode 100644 src/generateYmal.js delete mode 100644 src/index.js delete mode 100644 src/logo.svg create mode 100644 src/main.tsx delete mode 100644 src/reportWebVitals.js delete mode 100644 src/scripts/.env.test delete mode 100644 src/scripts/requirements.txt delete mode 100644 src/scripts/setup_environment.sh delete mode 100644 src/scripts/snapshot_crawler.py create mode 100644 src/vite-env.d.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore index 0426a242..a547bf36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,24 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -/src/scripts/gip_scraper -/src/logs - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local -**/.env -.venv/ -.cache/ -tmp/ +# Logs +logs *.log - npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/config-overrides.js b/config-overrides.js deleted file mode 100644 index 29613f86..00000000 --- a/config-overrides.js +++ /dev/null @@ -1,10 +0,0 @@ -const path = require('path'); - -module.exports = { - // Other configuration options... - resolve: { - fallback: { - "buffer": require.resolve("buffer/") - } - } -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/index.html b/index.html new file mode 100644 index 00000000..e4b78eae --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package-lock.json b/package-lock.json index 46e79778..62ff5a76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,48 +1,39 @@ { - "name": "gip_dashboard_react", - "version": "0.1.0", + "name": "gip_dashboard", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "gip_dashboard_react", - "version": "0.1.0", + "name": "gip_dashboard", + "version": "0.0.0", "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "bootstrap": "^5.3.3", - "buffer": "^6.0.3", - "chart.js": "^4.4.6", - "chartjs-plugin-annotation": "^3.0.1", - "chartjs-plugin-zoom": "^2.0.1", "react": "^18.3.1", - "react-bootstrap": "^2.10.4", - "react-chartjs-2": "^5.2.0", "react-dom": "^18.3.1", - "react-markdown": "^9.0.1", - "react-scripts": "^5.0.1", - "react-tabs": "^6.0.2", - "web-vitals": "^2.1.4" + "react-tabs": "^6.0.2" }, "devDependencies": { - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "postcss": "^8.4.47", - "react-app-rewired": "^2.2.1", - "resolve-url-loader": "^5.0.0" + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" } }, - "node_modules/@adobe/css-tools": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", - "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", - "license": "MIT" - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "license": "MIT", + "dev": true, "engines": { "node": ">=10" }, @@ -54,7 +45,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -67,7 +58,7 @@ "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -81,7 +72,7 @@ "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "license": "MIT", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -90,7 +81,7 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "license": "MIT", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -116,38 +107,11 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", - "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", - "license": "MIT", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/@babel/eslint-parser/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==", - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, "node_modules/@babel/generator": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/parser": "^7.26.2", "@babel/types": "^7.26.0", @@ -159,36 +123,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/compat-data": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -200,78 +139,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -284,7 +156,7 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", @@ -297,83 +169,11 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, + "dev": true, "engines": { "node": ">=6.9.0" } @@ -382,7 +182,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -391,7 +191,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -400,21 +200,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, + "dev": true, "engines": { "node": ">=6.9.0" } @@ -423,7 +209,7 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.0" @@ -436,7 +222,7 @@ "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "license": "MIT", + "dev": true, "dependencies": { "@babel/types": "^7.26.0" }, @@ -447,27 +233,11 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -475,14 +245,14 @@ "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, @@ -490,18020 +260,2123 @@ "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/template": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "node_modules/@babel/traverse": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=4" } }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", - "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", - "license": "MIT", + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-decorators": "^7.25.9" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", - "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", - "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "license": "MIT", + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "license": "MIT", + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=18" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "license": "MIT", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "levn": "^0.4.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18.18.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "license": "MIT", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18.18.0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=18.18" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=12.22" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=18.18" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "license": "MIT", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "license": "MIT", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", - "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", - "license": "MIT", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-flow": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "license": "MIT", + "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": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, + "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": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "license": "MIT", + "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": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "license": "MIT" - }, - "node_modules/@csstools/normalize.css": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", - "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", - "license": "CC0-1.0" - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "license": "CC0-1.0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/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==", - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/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==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/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==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/globals/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "license": "MIT", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "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==", - "license": "MIT", - "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==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", - "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", - "license": "MIT", - "dependencies": { - "ansi-html": "^0.0.9", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^4.2.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x || 5.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@react-aria/ssr": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.6.tgz", - "integrity": "sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@restart/hooks": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", - "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.3" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@restart/ui": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.8.0.tgz", - "integrity": "sha512-xJEOXUOTmT4FngTmhdjKFRrVVF0hwCLNPdatLCHkyS4dkiSK12cEu1Y0fjxktjJrdst9jJIc5J6ihMJCoWEN/g==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", - "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", - "dequal": "^2.0.3", - "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", - "warning": "^4.0.3" - }, - "peerDependencies": { - "react": ">=16.14.0", - "react-dom": ">=16.14.0" - } - }, - "node_modules/@restart/ui/node_modules/uncontrollable": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", - "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.14.0" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "license": "MIT" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "license": "Apache-2.0", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "license": "MIT", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", - "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.8" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "license": "MIT" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", - "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "license": "MIT" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", - "license": "MIT", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/warning": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "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" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "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.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.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/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "license": "MIT", - "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.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "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/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "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" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "license": "BSD-3-Clause" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "license": "MIT", - "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==", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.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==", - "license": "MIT", - "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/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", - "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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==", - "license": "MIT", - "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==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", - "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "license": "MIT" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", - "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "license": "MIT", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/babel-loader": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", - "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.4", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "license": "MIT", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "license": "MIT" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/bfj": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", - "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", - "license": "MIT", - "dependencies": { - "bluebird": "^3.7.2", - "check-types": "^11.2.3", - "hoopy": "^0.1.4", - "jsonpath": "^1.1.1", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/bootstrap": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", - "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "license": "MIT", - "peerDependencies": { - "@popperjs/core": "^2.11.8" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "license": "BSD-2-Clause" - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001678", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001678.tgz", - "integrity": "sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "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/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chart.js": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz", - "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==", - "license": "MIT", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, - "node_modules/chartjs-plugin-annotation": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/chartjs-plugin-annotation/-/chartjs-plugin-annotation-3.1.0.tgz", - "integrity": "sha512-EkAed6/ycXD/7n0ShrlT1T2Hm3acnbFhgkIEJLa0X+M6S16x0zwj1Fv4suv/2bwayCT3jGPdAtI9uLcAMToaQQ==", - "license": "MIT", - "peerDependencies": { - "chart.js": ">=4.0.0" - } - }, - "node_modules/chartjs-plugin-zoom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz", - "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==", - "license": "MIT", - "dependencies": { - "hammerjs": "^2.0.8" - }, - "peerDependencies": { - "chart.js": ">=3.2.0" - } - }, - "node_modules/check-types": { - "version": "11.2.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", - "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/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==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", - "license": "MIT" - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "license": "MIT", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "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==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "license": "MIT" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", - "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", - "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.4.tgz", - "integrity": "sha512-9KdyVPPtLHjPAD7tcuzSFs64UfHlLJt7U6qP4/bFVLyjLceyizj6s6jO6YBaV5d0G7g/9KnY/dOpLR4Rcg8YDg==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "license": "MIT", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "license": "CC0-1.0", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "license": "MIT" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "license": "MIT" - }, - "node_modules/cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "CC0-1.0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "license": "MIT", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "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==", - "license": "BSD-2-Clause" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "license": "MIT" - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "license": "Apache-2.0" - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "license": "MIT" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "license": "BSD-2-Clause" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.52", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.52.tgz", - "integrity": "sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", - "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/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "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.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "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-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "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==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "license": "BSD-3-Clause", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "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==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "license": "MIT", - "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==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "license": "MIT", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/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==", - "license": "Python-2.0" - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", - "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==", - "license": "BSD-2-Clause", - "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==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", - "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==", - "license": "ISC", - "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==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", - "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "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/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "license": "(Apache-2.0 OR MPL-1.1)" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", - "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-url-attributes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", - "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "license": "ISC" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "license": "MIT", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "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==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "license": "MIT", - "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.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "license": "MIT" - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "license": "MIT", - "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==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", - "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==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "license": "MIT", - "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==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "license": "MIT", - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "license": "MIT", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-haste-map/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "license": "MIT", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "license": "MIT", - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "license": "MIT" - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "license": "MIT", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "license": "MIT", - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "license": "MIT", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watcher/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "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==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", - "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "license": "MIT", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - } - }, - "node_modules/jsonpath/node_modules/esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "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": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", - "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", - "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.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "license": "MIT" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "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==", - "license": "MIT", - "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==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "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": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "license": "CC0-1.0", - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "license": "MIT", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "license": "CC0-1.0", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types-extra": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", - "license": "MIT", - "dependencies": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - }, - "peerDependencies": { - "react": ">=0.14.0" - } - }, - "node_modules/prop-types-extra/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==", - "license": "MIT" - }, - "node_modules/prop-types/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==", - "license": "MIT" - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "license": "MIT", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "license": "MIT", - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT" - }, - "node_modules/react-app-rewired": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.2.1.tgz", - "integrity": "sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^5.6.0" - }, - "bin": { - "react-app-rewired": "bin/index.js" - }, - "peerDependencies": { - "react-scripts": ">=2.1.3" - } - }, - "node_modules/react-app-rewired/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/react-bootstrap": { - "version": "2.10.5", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", - "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.24.7", - "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.9", - "@types/react-transition-group": "^4.4.6", - "classnames": "^2.3.2", - "dom-helpers": "^5.2.1", - "invariant": "^2.2.4", - "prop-types": "^15.8.1", - "prop-types-extra": "^1.1.0", - "react-transition-group": "^4.4.5", - "uncontrollable": "^7.2.1", - "warning": "^4.0.3" - }, - "peerDependencies": { - "@types/react": ">=16.14.8", - "react": ">=16.14.0", - "react-dom": ">=16.14.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-chartjs-2": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", - "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", - "license": "MIT", - "peerDependencies": { - "chart.js": "^4.1.1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/react-markdown": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", - "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "html-url-attributes": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=18", - "react": ">=18" - } - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-scripts/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/react-scripts/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "license": "ISC" - }, - "node_modules/react-scripts/node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/react-scripts/node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/react-scripts/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-scripts/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-tabs": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.0.2.tgz", - "integrity": "sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "prop-types": "^15.5.0" - }, - "peerDependencies": { - "react": "^18.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "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/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" + "node": ">= 8" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, "engines": { - "node": ">= 0.10" + "node": ">=14" } }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz", + "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz", + "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz", + "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz", + "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz", + "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz", + "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz", + "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz", + "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz", + "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz", + "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz", + "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz", + "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz", + "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz", + "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz", + "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz", + "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz", + "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz", + "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", - "license": "MIT", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@babel/types": "^7.0.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "license": "MIT", + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "@babel/types": "^7.20.7" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, + "dependencies": { + "@types/react": "*" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", + "dev": true, "dependencies": { - "glob": "^7.1.3" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=10.0.0" + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "license": "MIT", + "node_modules/@typescript-eslint/parser": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "rollup": "^2.0.0" + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "license": "MIT", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "license": "MIT", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } - ], - "license": "MIT" + } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, + "node_modules/@typescript-eslint/types": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "license": "CC0-1.0" - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "dev": true, "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { + "typescript": { "optional": true } } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "license": "ISC" + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "license": "ISC", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "xmlchars": "^2.2.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", + "node_modules/@typescript-eslint/utils": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "license": "MIT", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "@typescript-eslint/types": "8.14.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 12.13.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://opencollective.com/eslint" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "ajv": "^8.8.2" + "vite": "^4.2.0 || ^5.0.0" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "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/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", + "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": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", + "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": { - "randombytes": "^2.1.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "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/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" + "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/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", + "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": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">= 0.4" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "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==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "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==", - "license": "MIT", + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", + "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": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "license": "MIT", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 8.10.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://paulmillr.com/funding/" }, - "peerDependencies": { - "webpack": "^5.0.0" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", + "node_modules/chokidar/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": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "license": "MIT" - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" } }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", + "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": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "node": ">=7.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "license": "MIT" + "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/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/stack-utils/node_modules/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==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT" + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, - "node_modules/static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "license": "MIT", + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dev": true, "dependencies": { - "escodegen": "^1.8.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=4" } }, - "node_modules/static-eval/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true }, - "node_modules/static-eval/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "license": "MIT", + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "node": ">=6.0" }, - "engines": { - "node": ">= 0.8.0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/static-eval/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/static-eval/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, - "node_modules/static-eval/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/electron-to-chromium": { + "version": "1.5.57", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.57.tgz", + "integrity": "sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==", + "dev": true }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "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/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/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==", - "license": "MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/string-width-cjs": { - "name": "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==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "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": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "license": "MIT", + "node_modules/eslint": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "estraverse": "^5.1.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=0.10" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", + "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": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "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": ">=8" + "node": ">=4.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@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" + "node": ">=8.6.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "license": "MIT", + "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": ">=8" + "node": ">= 6" } }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=16.0.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "license": "MIT", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { - "min-indent": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, - "peerDependencies": { - "webpack": "^5.0.0" + "engines": { + "node": ">=16" } }, - "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "license": "MIT", + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, - "node_modules/sucrase/node_modules/glob": { + "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -18519,11 +2392,32 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/sucrase/node_modules/minimatch": { + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -18534,1927 +2428,1448 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "engines": { + "node": ">=18" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "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/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "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==", - "license": "MIT", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "license": "MIT", + "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": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.8.19" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "node": ">=8" } }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "license": "BSD-2-Clause", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "license": "BSD-2-Clause", + "hasown": "^2.0.2" + }, "engines": { - "node": ">= 6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/svgo/node_modules/has-flag": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "license": "BSD-2-Clause", + "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": { - "boolbase": "~1.0.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, + "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": ">=4" + "node": ">=0.12.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "license": "MIT" + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "node_modules/tailwindcss": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", - "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", - "license": "MIT", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "@isaacs/cliui": "^8.0.2" }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" + "funding": { + "url": "https://github.com/sponsors/isaacs" }, - "engines": { - "node": ">=14.0.0" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "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/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "license": "MIT", + "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": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "license": "BSD-2-Clause", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" + "json-buffer": "3.0.1" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "license": "MIT", + "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": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "node": ">= 0.8.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=10" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, - "node_modules/test-exclude": { + "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } + "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/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", + "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": { - "thenify": ">= 3.1.0 < 4" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=0.8" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "license": "BSD-3-Clause" - }, - "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==", - "license": "MIT", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "yallist": "^3.0.2" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", + "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": ">=0.6" + "node": ">= 8" } }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "license": "BSD-3-Clause", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "node": ">=8.6" } }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "license": "MIT", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "punycode": "^2.1.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": "*" } }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "license": "MIT" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "license": "MIT", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" + "nanoid": "bin/nanoid.cjs" }, "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": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "license": "MIT", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "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.5" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "license": "MIT", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "license": "MIT", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "license": "MIT", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "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": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "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": ">=4.2.0" + "node": ">=8" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "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/uncontrollable": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", - "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", - "license": "MIT", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.6.3", - "@types/react": ">=16.9.11", - "invariant": "^2.2.4", - "react-lifecycles-compat": "^3.0.4" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "peerDependencies": { - "react": ">=15.0.0" + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", - "license": "MIT" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", + "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": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "node": ">=8.6" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=8" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "node": ">=14.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, "dependencies": { - "@types/unist": "^3.0.0" + "camelcase-css": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "engines": { + "node": "^12 || ^14 || >= 16" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "url": "https://opencollective.com/postcss/" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "postcss": "^8.4.21" } }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "license": "MIT" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "license": "MIT", + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "url": "https://opencollective.com/postcss/" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "postcss-selector-parser": "^6.1.1" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">=12.0" }, "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "postcss": "^8.2.14" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "license": "MIT", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", + "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.4.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==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">= 0.8.0" } }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "license": "ISC", + "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": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", + "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/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" + "loose-envify": "^1.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } + "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/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "license": "Apache-2.0", + "node_modules/react-tabs": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.0.2.tgz", + "integrity": "sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==", "dependencies": { - "makeerror": "1.0.12" + "clsx": "^2.0.0", + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "^18.0.0" } }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "license": "MIT", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, "dependencies": { - "loose-envify": "^1.0.0" + "pify": "^2.3.0" } }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "license": "MIT", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==", - "license": "Apache-2.0" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" + "node": ">=8.10.0" } }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "license": "MIT", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" + "resolve": "bin/resolve" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, + "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": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "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/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", + "node_modules/rollup": { + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz", + "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==", + "dev": true, "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "@types/estree": "1.0.6" }, "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.26.0", + "@rollup/rollup-android-arm64": "4.26.0", + "@rollup/rollup-darwin-arm64": "4.26.0", + "@rollup/rollup-darwin-x64": "4.26.0", + "@rollup/rollup-freebsd-arm64": "4.26.0", + "@rollup/rollup-freebsd-x64": "4.26.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.26.0", + "@rollup/rollup-linux-arm-musleabihf": "4.26.0", + "@rollup/rollup-linux-arm64-gnu": "4.26.0", + "@rollup/rollup-linux-arm64-musl": "4.26.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0", + "@rollup/rollup-linux-riscv64-gnu": "4.26.0", + "@rollup/rollup-linux-s390x-gnu": "4.26.0", + "@rollup/rollup-linux-x64-gnu": "4.26.0", + "@rollup/rollup-linux-x64-musl": "4.26.0", + "@rollup/rollup-win32-arm64-msvc": "4.26.0", + "@rollup/rollup-win32-ia32-msvc": "4.26.0", + "@rollup/rollup-win32-x64-msvc": "4.26.0", + "fsevents": "~2.3.2" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "utf-8-validate": { - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "license": "MIT", + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" + "loose-envify": "^1.1.0" } }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "license": "MIT", + "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": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "license": "MIT", + "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": ">=10.13.0" + "node": ">=8" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" + "node": ">=8" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "node_modules/string-width-cjs/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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT" + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "license": "MIT", + "node_modules/string-width-cjs/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": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "ansi-regex": "^6.0.1" }, "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==", - "license": "MIT", - "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" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "license": "MIT", + "node_modules/strip-ansi-cjs": { + "name": "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": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, + "node_modules/strip-ansi-cjs/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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, + "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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "license": "MIT", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "license": "MIT", - "dependencies": { - "workbox-core": "6.6.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "license": "MIT", + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "license": "MIT", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", + "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": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "license": "BSD-3-Clause", - "dependencies": { - "whatwg-url": "^7.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": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "license": "MIT", + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, "dependencies": { - "punycode": "^2.1.0" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "license": "BSD-2-Clause" + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "license": "MIT", + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "any-promise": "^1.0.0" } }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "license": "MIT", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, "dependencies": { - "workbox-core": "6.6.0" + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", - "license": "MIT" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "license": "MIT", + "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": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", - "license": "MIT", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "license": "MIT", - "dependencies": { - "workbox-core": "6.6.0" - } + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "license": "MIT", + "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": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "license": "MIT", - "dependencies": { - "workbox-core": "6.6.0" + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "license": "MIT", + "node_modules/typescript-eslint": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", + "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", + "dev": true, "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" + "@typescript-eslint/eslint-plugin": "8.14.0", + "@typescript-eslint/parser": "8.14.0", + "@typescript-eslint/utils": "8.14.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "license": "MIT", + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "workbox-core": "6.6.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "license": "MIT", + "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": { - "workbox-core": "6.6.0" + "punycode": "^2.1.0" } }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "license": "MIT", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", - "license": "MIT" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "license": "MIT", + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=10.0.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "license": "MIT", + "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": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "license": "MIT", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -20465,7 +3880,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20478,129 +3893,88 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" + "node_modules/wrap-ansi-cjs/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/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "node_modules/wrap-ansi-cjs/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" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "license": "Apache-2.0" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "license": "MIT" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" + "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "bin": { + "yaml": "bin.mjs" }, "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" + "node": ">= 14" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index ce2cf4e3..a71a43f2 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,33 @@ { - "name": "gip_dashboard_react", - "version": "0.1.0", - "type": "module", + "name": "gip_dashboard", "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "bootstrap": "^5.3.3", - "buffer": "^6.0.3", - "chart.js": "^4.4.6", - "chartjs-plugin-annotation": "^3.0.1", - "chartjs-plugin-zoom": "^2.0.1", "react": "^18.3.1", - "react-bootstrap": "^2.10.4", - "react-chartjs-2": "^5.2.0", "react-dom": "^18.3.1", - "react-markdown": "^9.0.1", - "react-scripts": "^5.0.1", - "react-tabs": "^6.0.2", - "web-vitals": "^2.1.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject", - "generate-yaml": "node ./src/generateYmal.js", - "setup-env": "bash ./src/scripts/setup_environment.sh" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "react-tabs": "^6.0.2" }, "devDependencies": { - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "postcss": "^8.4.47", - "react-app-rewired": "^2.2.1", - "resolve-url-loader": "^5.0.0" + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..2e7af2b7 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/GIPs/GIP-1.yml b/public/GIPs/GIP-1.yml deleted file mode 100644 index e57a2bb1..00000000 --- a/public/GIPs/GIP-1.yml +++ /dev/null @@ -1,82 +0,0 @@ -id: QmbSBUenuoRYYoMQ4NxmkVz3nBwfMwo3pdrBzZXR123toh -gip_number: '1' -url: https://snapshot.org/#/gnosis.eth/proposal/QmbSBUenuoRYYoMQ4NxmkVz3nBwfMwo3pdrBzZXR123toh -title: One-time 5% GNO merkledrop to active GnosisDAO participants -body: 'See the [forum post](https://forum.gnosis.io/t/gip-1-one-time-5-gno-airdrop-to-active-gnosisdao-participants/690) - for discussion and more details. - - - ## Simple Summary - - - In order to incentivize existing GNO holders to immediately become active in the - GnosisDAO, the GnosisDAO should merkledrop a 5% bonus to all Gnosis Safe addresses - that participate in GIP snapshot voting within the first month after the GnosisDAO - launches. - - - ## Abstract - - - The GnosisDAO will use a merkledrop to distribute, pro-rata, 5% of the balance GNO - balance held in Gnosis Safes and used to vote in the GnosisDAO within the first - month after the GnosisDAO launches. For example, a safe that holds 100 GNO and casts - a vote for this (or any other) GIP proposal, within the time limit, would receive - 5 GNO tokens in the merkledrop. - - - ## Motivation - - - The motivation for this proposal is to immediately activate existing and new GNO - token holders to become active in GnosisDAO governance decisions. This proposal - would also help to further distribute GNO tokens in the community. - - - ## Specification - - - The merkledrop will use an instance of Balancer Labs'' [erc20-redeemable contracts](https://github.com/balancer-labs/erc20-redeemable/tree/master/merkle) - and an instance of Balancer Labs'' [claim interface](https://claim.balancer.finance/#/). - - - More detail will be added to the specification as becomes available. - - - ## Rationale - - - A merkledrop should be used, as opposed to other designs, so as to reduce the upfront - gas cost and to require recipients to actively claim their bonus tokens. - - - ## Disclaimer - - - The plans outlined in this proposal are subject to discussion and change. They may - also need to be (re)structured to take account of legal, regulatory, or technical - developments as well as governance considerations. This document should not be taken - as the basis for making investment decisions, nor be construed as a recommendation - to engage in any transactions. You are solely responsible for your own investment - decisions and transactions.' -start: 1606107600 -end: 1606755540 -state: closed -author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 98162.4988733109 -scores: - - 65159.542577608045 - - 33002.95629570285 - - 0 -votes: 99 -quorum: 0 -funding: - amount: 5% - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-10.yml b/public/GIPs/GIP-10.yml deleted file mode 100644 index 01858d54..00000000 --- a/public/GIPs/GIP-10.yml +++ /dev/null @@ -1,60 +0,0 @@ -id: QmVdpMzXaXxWS4htWRxtux9VcaTY4zfr27xPjkoQSSEgAc -gip_number: '10' -url: https://snapshot.org/#/gnosis.eth/proposal/QmVdpMzXaXxWS4htWRxtux9VcaTY4zfr27xPjkoQSSEgAc -title: Adopt Participation Agreement -body: "### SIMPLE SUMMARY\n\nThis is a proposal to implement a private ordering agreement\ - \ (a so-called “Participation Agreement”) among all GnosisDAO participants to provide\ - \ an operating framework for the GnosisDAO and to govern the rights and obligations\ - \ of each party.\n\n### ABSTRACT\n\nThe participation agreement:\n- explains the\ - \ GnosisDAO’s governance mechanism and determines who GnosisDAO participants are.\n\ - - provides a mutual release by DAO participants from claims arising out of or in\ - \ connection with the GnosisDAO and a mutual waiver of claims against the GnosisDAO\ - \ and other DAO participants.\n- limits the liability of the GnosisDAO, the service\ - \ providers, Gnosis Limited, and the signers in relation to loss or damage arising\ - \ under or in connection with the use of GnosisDAO smart contracts.\n- provides\ - \ a complaints and dispute resolution procedure.\n\n### MOTIVATION\n\nAs a DAO that\ - \ is not wrapped within a legacy system legal entity, it is paramount to minimize\ - \ the legal risks to GnosisDAO participants as much as possible.\n\n### SPECIFICATION\n\ - \n[Proposed Participation Agreement](https://docs.google.com/document/d/1HzK3VbOJ3MLllimKquT-SPnL81lx7n1BKEOwq1hW1hE/edit?usp=sharing)\n\ - \n### RATIONALE\n\nThe GnosisDAO is a decentralised collective stewarding a growing\ - \ ecosystem by developing and dogfooding the operating system for Ethereum and is\ - \ governed by, and returns value to, the GNO token holders. It relies on the Gnosis\ - \ Safe Multisig smart contracts and Gnosis Zodiac modules for DAO governance to\ - \ enable transparent governance by the GNO token holders to manage the GnosisDAO\ - \ and control resources transparently. Although the GnosisDAO was seeded by Gnosis\ - \ Limited, Gnosis Limited has relinquished all control over the GnosisDAO. It is\ - \ participant managed, and does not have any director or manager. No single party\ - \ is in control. \n\nAs the GnosisDAO exists entirely on-chain, jurisdiction may\ - \ not recognise it as an entity with legal personality or limited liability. While\ - \ efforts are underway (notably in Wyoming, Malta and by COALA, who have been drafting\ - \ a DAO Model Law), unincorporated DAOs do not operate as persons within the eyes\ - \ of the law.\n\nThe attempted shoehorning of DAOs by legal systems into existing\ - \ categories such as unregistered organisations, unincorporated associations or\ - \ general partnerships leads to concerns that DAO participants may be held liable\ - \ for the actions of the DAO. While GnosisDAO Participants cannot dictate states\ - \ and state regulators how to characterise the GnosisDAO, we should use whatever\ - \ private law mechanism at our disposal to frame the GnosisDAO as we see it and\ - \ minimize legal risks as much as possible to the GnosisDAO, GnosisDAO participants,\ - \ Gnosis Limited as the initial funder, service providers and the signers of the\ - \ GnosisDAO Safe multisig." -start: 1624017540 -end: 1624622400 -state: closed -author: '0xC42d7E776cB079C3C3b205BD307D0CdbB2431Dd3' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 97082.13067806746 -scores: - - 97082.13067806746 - - 0 - - 0 -votes: 116 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-100.yml b/public/GIPs/GIP-100.yml deleted file mode 100644 index 7d49f3d0..00000000 --- a/public/GIPs/GIP-100.yml +++ /dev/null @@ -1,122 +0,0 @@ -id: gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program -gip_number: 100 -url: https://forum.gnosis.io/t/gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program -title: Should Gnosis DAO conduct a large-scale buyback program? -body: "#### Category\n\nTreasury\n\n#### TL;DR\n\nI represent [Thanefield Capital](https://thanefield.capital/),\ - \ a multi-strategy crypto fund; GNO is one of our thesis-driven investments.\n\n\ - Currently, GNO is significantly undervalued relative to its book value. To address\ - \ this, we propose initiating a large-scale buyback program. Our plan involves deploying\ - \ $30 million, representing about 5% of the estimated assets of Gnosis DAO, over\ - \ a six-month period.\n\n#### Introduction\n\nGnosis DAO has consistently been at\ - \ the forefront of innovation, successfully developing and launching products such\ - \ as Safe and CoW Protocol. These initiatives began as internal projects and were\ - \ later spun off into independent ventures. Despite these successes and several\ - \ previous rounds of buybacks, the GNO token has not adequately reflected the value\ - \ generated by these and numerous other activities.\n\nGNO is currently trading\ - \ below its book value, considering only the marketable tokens owned by Gnosis DAO.\ - \ This valuation suggests that the market is assigning a negative value to all other\ - \ Gnosis DAO assets. These assets include, but are not limited to, Gnosis Chain,\ - \ Gnosis Pay, Gnosis Wallet, Circles, a venture capital portfolio of over 40 companies,\ - \ and investments in four crypto VCs. This means that long-term GNO holders have\ - \ not financially benefited from the DAO’s successes in product development, venture\ - \ investments, and treasury management. Additionally, it becomes uneconomic to allocate\ - \ any GNO that already belong to the DAO for ecosystem growth or other initiatives,\ - \ as it would result in a negative value transfer for the DAO.\n\nGnosis DAO is\ - \ well-positioned to address this undervaluation as one of the most capitalized\ - \ DAOs, holding over $630 million in assets and ranking second only to Mantle in\ - \ terms of non-native marketable tokens. We propose initiating a substantial buyback\ - \ program to correct this disparity. If approved by a DAO vote, [@Karpatkey](/u/karpatkey)\ - \ will manage the execution of this program.\n\nIt’s important to note that this\ - \ proposal operates independently but complements the vision outlined in [Gnosis\ - \ DAO v3](https://forum.gnosis.io/t/introducing-gnosis-3-0/8252), which aims to\ - \ establish protocol-owned liquidity between GNO and portfolio projects. If approved\ - \ by the DAO, these initiatives should progress concurrently.\n\n#### Objectives\ - \ of the program\n\n 1. Transfer value from sellers to long-term holders by acquiring\ - \ GNO below its intrinsic value. The acquired tokens could then be utilized for\ - \ treasury swaps, incentives, growth initiatives, and further investments.\n 2.\ - \ Signal to the market a commitment to establishing a valuation floor for GNO that\ - \ consistently exceeds its book value.\n 3. Drive attention to the products of\ - \ the DAO. Given the attention-driven nature of the crypto market, where price often\ - \ influences fundamentals, large-scale buyback program can elevate both market perception\ - \ and fundamental value.\n\n\n\n#### Gnosis DAO assets breakdown\n\nThis discussion\ - \ is centered on the marketable tokens and illiquid venture deals & investments\ - \ in venture capital funds, specifically excluding other significant assets like\ - \ Gnosis Chain, Gnosis Pay, and Gnosis Wallet.\n\n 1. Marketable tokens\n\n\n\n\ - As of today, Gnosis DAO holds $631 million in tradable tokens, not including GNO\ - \ (this number corresponds to the assets that belong to Gnosis DAO that we could\ - \ locate onchain). This figure serves as a foundation for valuing Gnosis DAO’s assets.\ - \ It’s important to note that not all these assets are immediately liquid. For example,\ - \ approximately half of the SAFE token allocation is yet to vest. Furthermore, a\ - \ significant portion of both SAFE and OLAS tokens has been voluntarily placed into\ - \ lock-up contracts to demonstrate commitment. The primary assets in the treasury\ - \ include ETH and equivalents, SAFE, stablecoins, OLAS, and COW. In 2023, the treasury\ - \ generated $10.2 million by engaging these assets in DeFi activities.\n\n![VPau_nVKOjhDRId2w8Tz2X8ttgofE5ZE6vNrVUcJeCMbr5ZWkB_6hWJWLSScpZi57gjA3aiCVSNo1cwUqXa7b-IfTzGCs8MrTu0CXtYLQqSOAAWidd2V_3-1VYPo](https://forum.gnosis.io/uploads/default/original/2X/7/73744391d6708b211cc8dc54e50788ac005a0829.png)\n\ - \nAdditionally, Gnosis DAO has a 50% stake in the Safe <> Gnosis joint treasury,\ - \ which owns 5% of the SAFE token supply, valued at approximately $115 million currently.\ - \ These assets are not included in the above calculation.\n\n 2. Illiquid venture\ - \ deals\n\n\n\nAccording to the [list](https://forum.gnosis.io/t/introducing-gnosis-3-0/8252/3)\ - \ published by Ernst on this forum, Gnosis DAO has made about 50 venture investments\ - \ over the years either directly or through in-house Factor VC.\n\nInvestments that\ - \ remain illiquid/are not located include:\n\nFlashbots, Matter Labs (ZKsync), Aztec,\ - \ RISC Zero, IDEX, Succinct, Orca, Anoma, Zerion, POAP, ImmuneFi, WalletConnect,\ - \ [Kinetex.io](http://Kinetex.io), Fileverse, NFTfi, [Li.Fi](http://Li.Fi), Hedgey,\ - \ Azuro, Harbor, Snapshot, Diva, Phaver, Rated Network, [Mimic.fI](http://Mimic.fI),\ - \ Sablier, Coinshift, Vibe.xyz, Parcel, Mean.finance, Collab, AMMalgam, Topos, Bootnode,\ - \ Stablelab, Backed, Least Authority, Cypherock, Gateway.fm, Den, Mystiko, Shutter,\ - \ Altlayer, Karpatkey (spinoff).\n\nAdditionally, Gnosis DAO is an LP in the following\ - \ VC funds:\n\n1kx, Lightshift, LongHash Ventures, Seed Club Ventures.\n\nWhile\ - \ it is challenging to precisely value these illiquid venture deals due to many\ - \ unknown variables, this portfolio includes high-profile deals and ensures growth\ - \ in Gnosis DAO liquid treasury as these tokens launch and vest, widening the discount\ - \ at which GNO is currently trading.\n\n#### Gnosis DAO’s GNO holdings\n\nAccording\ - \ to CoinGecko, the circulating supply of GNO tokens is listed as 2,589,589, which\ - \ is valued at approximately $703 million. However, this figure does not include\ - \ 1,050,884 GNO tokens owned by Gnosis DAO, many of which were acquired through\ - \ buybacks and are unlikely to be released into circulation, at least before GNO\ - \ is back to its book value. Therefore, the actual circulating supply is reduced\ - \ to 1,538,705 GNO, amounting to approximately $424 million.\n\n#### GNO book value\n\ - \nWith our ballpark estimate of the venture book & investments in VCs at $100 million,\ - \ we arrive at $730 million in assets. With the current GNO real market cap at $424\ - \ million, it’s currently trading 42% below its book value of $475. To reach its\ - \ book value, GNO has to appreciate by about 72% based on current numbers. Since\ - \ the treasury contains volatile assets, it should be calculated dynamically as\ - \ the program progresses.\n\nIt is important to note that the book value of GNO\ - \ does not fully represent its intrinsic value, which should also account for future\ - \ cash flows generated by the DAO. Therefore, the book value should be considered\ - \ merely a baseline or minimum value before the DAO decides to spend any GNO it\ - \ already owns or acquires through this program.\n\n#### Proposed execution\n\n\ - To address the undervaluation of GNO and effectively utilize the treasury assets,\ - \ we propose allocating approximately 5% of the treasury funds, amounting to $30\ - \ million, for a structured buyback strategy. This amount will be divided into two\ - \ distinct parts, each employing a different strategy to optimize the overall impact.\n\ - \n 1. CoW-TWAP\n\n\n * Allocates $15 million over 6 months;\n * Executes orders\ - \ at any price below the dynamically calculated book value of GNO;\n * Results\ - \ into $83,333 daily buy pressure.\n\n\n 2. Discretionary, executed by Karpatkey\n\ - \n\n * Allocates $15 million;\n * Provides Karpatkey with full discretion to capitalize\ - \ on the best opportunities.\n\n\n\n#### Assessment\n\nAfter the conclusion of the\ - \ program, we should assess its results and consider whether to continue, modify,\ - \ or end the buyback strategy going forward.\n\n6 Likes\n\n[Curia Delegate Platform](https://forum.gnosis.io/t/curia-delegate-platform/8279/3)\n\ - \n[Staworth / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/2)\n\ - \n**[next page →](/t/gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program/8556?page=2)**\n" -start: 1715950894 -end: null -state: - - phase-1 -author: '<Nay' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 30 million - currency: $ - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-101.yml b/public/GIPs/GIP-101.yml deleted file mode 100644 index 9c9b77c6..00000000 --- a/public/GIPs/GIP-101.yml +++ /dev/null @@ -1,142 +0,0 @@ -id: '0xcdee441c9d501b9ec2127b62ca846d6ead68165163d537cc5c36d93002c17b11' -gip_number: '101' -url: https://snapshot.org/#/gnosis.eth/proposal/0xcdee441c9d501b9ec2127b62ca846d6ead68165163d537cc5c36d93002c17b11 -title: Should karpatkey and StableLab Establish a Delegate Program v0 for the GnosisDAO? -body: "## Executive Summary\nThis proposal aims to prevent the GnosisDAO from encountering\ - \ challenges related to reaching a quorum on its proposals, preventing the hindrance\ - \ of effective decision-making and governance processes. This program is designed\ - \ to improve quorum participation, increase community engagement and strengthen\ - \ the governance processes of the GnosisDAO, leading to more effective and inclusive\ - \ decision-making.\n\nThis proposal suggests electing ten delegates through a transparent\ - \ and democratic election process to increase the DAO's ability to reach a quorum\ - \ and enhance the community's participation in decision-making. \n\nEach selected\ - \ delegate will receive 5,000 GNO from the DAO Treasury, empowering them to represent\ - \ the community's interests and contribute actively to the governance of the GnosisDAO.\ - \ This delegation will last six months. This proposal distributes temporary voting\ - \ power only.\n\n\n## Specification\nThis program will delegate 5,000 GNO from the\ - \ GnosisDAO treasury to 10 candidates selected through a Snapshot voting process.\n\ - \n### Eligibility Criteria\nEach applicant must meet the following criteria to be\ - \ eligible to become a delegate in this program:\n- **Active Community Membership.**\ - \ Nominees must be active members of the GnosisDAO Community. To meet this criteria,\ - \ they will share a link to their forum account or Discord, demonstrating activity\ - \ for at least six months.\n - If they do not meet this criteria, an active member\ - \ not already participating in this program may sponsor them. Active members may\ - \ only sponsor one applicant.\n- **History of Governance Experience.** Nominees\ - \ must have governance experience as demonstrated by a history of participation\ - \ in the GnosisDAO governance process or another active DAO. To meet these criteria,\ - \ they will share a link to their relevant Snapshot or Tally profile showing a history\ - \ of governance involvement.\n- **Post a Delegate Initiative.** Nominees will post\ - \ a delegate initiative on the GnosisDAO forum that outlines the details of their\ - \ experience in DAO Governance and their approach to contributing to GnosisDAO Governance.\ - \ \n\nThese criteria are designed to ensure that the selected delegates are experienced\ - \ and committed members of the GnosisDAO community, capable of effectively representing\ - \ the community's interests and contributing to the DAO's governance.\n\n### Delegate\ - \ Selection Process\n#### Submission\nDelegates will nominate themselves by posting\ - \ interest in the official *\"Nomination Thread\"*. The nomination thread will be\ - \ posted upon passing this proposal. Please provide the instructions, date, and\ - \ template for application submission.\n\nIn addition to meeting the Eligibility\ - \ Criteria, delegates will be expected to explain (at a minimum) the following in\ - \ their application:\n- **Introduction:** Introduce themselves or the organization.\ - \ The goal is one brief paragraph.\n- **Proposed Delegate Initiative:** State their\ - \ reason for wanting to be a GnosisDAO delegate or become further involved in the\ - \ GnosisDAO. \n- **Areas of expertise:** Explain any expertise relevant to their\ - \ involvement in the GnosisDAO.\n\n\n#### Voting and Selection\nAll *qualified and\ - \ complete* submissions received during the submission phase will be placed on a\ - \ ballot. The ballot will be moved to Snapshot, and voting will be conducted using\ - \ the [weighted voting](https://docs.snapshot.org/user-guides/proposals/voting-types#weighted-voting)\ - \ strategy. \n\nVoters are encouraged to select nominations that promote diversity\ - \ and representation based on their expertise, commitment to the DAO's principles\ - \ and dedication to advancing the GnosisDAO's mission. \n\nThe **top ten** nominations\ - \ receiving the most votes will be selected to receive a 5,000 GNO delegation for\ - \ this six-month trial program.\n\n### Timeline\nA nomination thread will be opened\ - \ on the forum, and applications will be accepted for three weeks. At the end of\ - \ three weeks, eligible applications will be assembled and move to a [weighted Snapshot\ - \ vote](https://docs.snapshot.org/user-guides/proposals/voting-types#weighted-voting)\ - \ to determine the selected delegates. \n\n| Phase | Duration |\n| -----------\ - \ | -------- |\n| Phase 1: Application | 3 weeks |\n| Phase 2: Voting | 1\ - \ week |\n| Phase 3: Active Delegation Program | 6 Months |\n\nAlthough\ - \ the duration timeline is specified in this proposal, the official dates will be\ - \ established once this proposal is passed and posted in the Nomination Thread with\ - \ instructions for applying.\n### Program Duration\nThis delegate trial program\ - \ will run for six months, after which the community will review it for renewal\ - \ or deprecation.\n\n### Delegation Allocation\nEach of the ten delegates selected\ - \ will receive 5k GNO independently. The distribution is designed to provide equal\ - \ incentives for participation.\n\nThe total amount being allocated (50k GNO) was\ - \ chosen because it represents a significant amount of quorum while not meaningfully\ - \ diluting current stakeholders while still providing a boosting governance involvement.\n\ - \nkarpatkey will assist the GnosisDAO in creating ten separate SAFEs, configuring\ - \ them to the same policy as employed in the treasury management SAFEs. This set-up\ - \ will ensure the DAO retains custody of the GNO and the signer for the delegation\ - \ actions.\n\n\n### Accountability Mechanisms\nTo ensure accountability for this\ - \ program and the delegates receiving active delegations, two sets of performance\ - \ indicators will be established:\n\n#### 1. Delegate KPI's\nDelegates will be required\ - \ to maintain minimum standards of participation. These standards are:\n- Maintaining\ - \ a voting record of at least 70%.\n- Maintaining a voting reasoning communication\ - \ record of 100%.\n\n#### 2. Program KPI's\nThis KPI ensures that program facilitators\ - \ remain actively involved and promote the success of delegates:\n- Greater than\ - \ 50% of the nominated and selected delegates meet their Delegate KPIs.\n\n**Note:**\ - \ If a delegate is below these indicators at the conclusion of the trial period,\ - \ this delegate will be ineligible to participate in the next Delegate Program cycle.\ - \ Elected delegates are entering this program with the expectation of voting on\ - \ all proposals and promptly communicating their rationale for voting on the forum.\n\ - \n\n## Rationale\nAchieving a quorum on proposals is not just a procedural requirement\ - \ but a crucial factor for the smooth functioning and effectiveness of the GnosisDAO.\ - \ Quorum ensures that decisions reflect the community's consensus and that proposals\ - \ receive adequate scrutiny and deliberation before implementation. However, the\ - \ DAO needs help to reach quorum levels, leading to delays in decision-making and\ - \ potentially impacting the progress of important initiatives vital for the DAO's\ - \ growth and success.\n\nBy selecting up to 10 delegates through an election process,\ - \ we aim to bolster quorum participation and increase community engagement in governance\ - \ activities. Delegates entrusted with representing the community's interests will\ - \ actively participate in discussions, vote on proposals, and advocate for initiatives\ - \ that align with the DAO's objectives. Their involvement will enhance the diversity\ - \ of perspectives considered in decision-making and foster a more inclusive governance\ - \ process. \n\n\n## Budget\n**The total budget for this six-month trial period is\ - \ $20,000, paid in xDAI.** The budget will pay StableLab to function as the \"Program\ - \ Facilitator\". This budget pays for the work involved in assisting with this program\ - \ design and providing oversight of delegates, including ensuring delegates remain\ - \ active in meeting their participation KPIs. \n\nStablelabs will also provide a\ - \ retrospective analysis of this program's efficacy to aid the DAO's decision to\ - \ continue beyond an initial six-month trial period.\n\n#### Payment Schedule\n\n\ - | Payment | Amount |\n| ------------ | --------------------------\ - \ |\n| Month 1 | One payment of 10,000 xDAI |\n| Month 3 | One payment of 10,000\ - \ xDAI |\n| **Total** | **20,000 xDAI** |\n\nThese two payments will\ - \ be made during the months of the active delegation phase following a successful\ - \ selection of delegates.\n\n## Evaluation\nThis program will be evaluated by successfully\ - \ completing the KPIs established in this proposal. A DAO vote will be required\ - \ to continue it beyond the initial six-month trial period.\n\n## Team/ Organization\n\ - karpatkey and StableLab are jointly presenting this proposal. StableLab will serve\ - \ the role of \"Program Facilitator\", providing oversight and upkeep, while karpatkey\ - \ will provide support in setting up the SAFEs.\n\n- **karpatkey** will support\ - \ the technical implementation of the Gnosis Delegate Program by initiating the\ - \ required SAFEs to achieve multiple delegations. karpatkey will also assist in\ - \ receiving the payment requests from StableLab. As an already established and compensated\ - \ service provider, karpatkey will provide these services under existing agreements.\n\ - \n- **StableLab** (*\"Program Facilitator\"*) will facilitate the governance frameworks\ - \ and non-technical operations required to execute the Gnosis Delegate Program so\ - \ that all elected delegates maintain their KPIs. This measure ensures that the\ - \ Delegate Program operates effectively and in the community's best interests. StableLab\ - \ has experience establishing, running, and actively participating in delegate programs\ - \ across DAOs such as Aave, Uniswap, 1inch, Balancer, Safe, etc.\n\n### Points of\ - \ Contact\n- karpatkey: @coltron.eth & @netrim\n- StableLab: @Kene_StableLab" -start: 1717779600 -end: 1718384400 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 91739.67054162115 -scores: - - 77970.25409401013 - - 13240.985315577514 - - 528.431132033523 -votes: 123 -quorum: 75000 -funding: - amount: 5,000 - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-102.yml b/public/GIPs/GIP-102.yml deleted file mode 100644 index 3c9f293f..00000000 --- a/public/GIPs/GIP-102.yml +++ /dev/null @@ -1,196 +0,0 @@ -id: '0x71dc9cfd5e83c7b1a58c8e11436029087e727087a7f5e59b6b93c48d4492e0bd' -gip_number: '102' -url: https://snapshot.org/#/gnosis.eth/proposal/0x71dc9cfd5e83c7b1a58c8e11436029087e727087a7f5e59b6b93c48d4492e0bd -title: Should GnosisDAO provide financing for the new GnosisVC ecosystem venture fund? -body: 'GIP: 102 - - title: Should GnosisDAO provide financing for the new GnosisVC ecosystem venture - fund? - - author: Ben, GnosisVC - - type: Funding - - status: Draft - - created: 2024-06-10 - - duration: 7y - - funding: $20 million - - - Summary - - - GnosisDAO should finance the new GnosisVC fund to promote further ecosystem growth - and product lines in the selected target verticals. - - Abstract - - - GnosisVC fund will raise a total of $40m, wherein GnosisDAO will invest $20m and - the remaining $20m will be raised from external LPs. - - GnosisVC will invest in early-stage projects to accelerate the development, adoption, - and growth of DApps and fintech integrations strengthening the broader Gnosis Ecosystem. - - - GnosisVC fund will deploy into early-stage projects in line with the existing Gnosis - 3.0 thesis with a focus on RWAs, Decentralized Infrastructure, and Financial Payment - Rails as target verticals. - - Fund Structure & Terms - - - The fund will be set up as a Cayman-exempt limited partnership with a term of 7 - years (+ up to 2 years extension) and a 2/20 fee structure (2% management fees and - 20% carry per industry standards). - - - The investment period will last for 3 years, with the expected schedule of the capital - calls being ca. one-third of the total commitment to be paid in per year. - - - Deliverables to LPs will include: - - Quarterly reports on the investment portfolio posted on DAO forum. - - Investment summaries are shared with LPs via a dedicated data room. - - Implementation Initiatives - - - Venture Fund: - - Support and incubate projects through funding, governance participation, and advisory. - - - Gnosis Ecosystem Integration: - - Onboarding and integrating portfolio companies into the larger Gnosis ecosystem - through an introduction to existing Gnosis projects and by facilitating a collaborative - environment. - - - Maintenance: - - Continued review and collaboration with existing partners and ongoing assistance - for portfolio companies from GIP 38. - - - Reporting: - - Quarterly reports and updates on investments and portfolio companies will be shared - with the DAO, as well as their contribution to the evolution of the Gnosis 3.0 thesis. - - Investment Thesis - - - GnosisVC will be deploying capital into projects that will strengthen the existing - Gnosis ecosystem through but not limited to the following three investment verticals: - - Financial Payments - - - Incremental margins are the core of the payment stack. The vertical is very crowded - with a deeply intermediated stack and heavy cross selling. Focussing on payments - middleware around Gnosis Pay, the fund should have considerable experience and informational - advantages to be able to build out an integrated stack from the point of sale onwards. - - Decentralized Infrastructure - - - The future of computing and data availability is open source. In the absence of - a fully mature Zero-Knowledge cryptography stack, the decentralization of services - and applications at scale must proceed hand-in-hand with an equivalent decentralization - of the underlying component infrastructure. The development of such an internet-native - substrate must be tackled from multiple avenues: data availability, composable compute - environments, orchestration and coordination of tasks, tooling, and real-time analytics - to name a few. As a case study, LLMs have captured the public imagination on a circa - 6-year-old technology. While there has been a lot of focus on model quality, model - tooling, hosting, and standalone end-user deployments are an equally important but - frequently underestimated part of the vertical. Historically, some of the most impressive - investments by Gnosis have been infrastructure-related (MatterLabs, Gelato, TheGraph). - As such, we believe that this vertical stays true to the Gnosis DNA. - - RWA - - - The Defi crypto markets are saturated with liquidity and narrative-driven demand - without sufficient credit products to deploy into. This is due to the current need - for full collateralization, so capital is abundant while investment opportunities - are still scarce, there is also huge latent demand for institutional adoption through - stablecoins, yield-bearing instruments, and new liquid RWAs. The continued growth - of self-custodial alternatives to existing CeFi interfaces presents the opportunity - to funnel conventional financial players into the already existing Defi stack. - - - Team - - - Investment Committee - - - Benjamin Senn, - - DAO Legal Consultant - - - Daniele Pinna, - - Quantitative DeFi Researcher 0xSideQuest - - - Colin Rix, - - Multi-Strategy Fund Portfolio Manager - - - Ariunaa Batzorig, - - DAO treasury & Portfolio/Asset Manager - - - Stefan George, - - CTO Gnosis (excluded from management fees and carry) - - - Advisors - - - Sebastian Bürgel, - - VP Technology Gnosis & Founder HOPR - - - Arthur Gervais, - - Assoc. Prof UCL & Founder D23E - - - For further information please contact info@gnosisvc.io - - Or enquire at https://docs.google.com/forms/d/e/1FAIpQLScIVwlz2D8IdaWDQp0t_2U9N_sHMc2XjGtYZICBuNzNutndNg/viewform' -start: 1719334174 -end: 1719938974 -state: closed -author: '0x679974B1a20826c45016906aa4E2499752De9c1e' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 76371.50349640354 -scores: - - 75858.7212688231 - - 11.975968855354395 - - 500.8062587250896 -votes: 96 -quorum: 75000 -funding: - amount: 20 million - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-103.yml b/public/GIPs/GIP-103.yml deleted file mode 100644 index e7316bce..00000000 --- a/public/GIPs/GIP-103.yml +++ /dev/null @@ -1,67 +0,0 @@ -id: gip-103-should-gnosis-dao-allocate-8k-gno-to-fund-a-usdc-incentives-program -gip_number: 103 -url: https://forum.gnosis.io/t/gip-103-should-gnosis-dao-allocate-8k-gno-to-fund-a-usdc-incentives-program -title: Should Gnosis DAO allocate 8k GNO to fund a USDC incentives program? - Governance - - Gnosis -body: "## Executive Summary\n\nThe USDC token on Gnosis Chain (currently available\ - \ by bridging from Ethereum through the Gnosis Bridge) is not compliant with the\ - \ Bridge Token Standard, established by Circle in November 2023. With the objective\ - \ of growing the USDC bridged into Gnosis, and the ultimate goal of Circle taking\ - \ over the token and converting it to native USDC on Gnosis Chain, we propose to\ - \ create an incentives program of up to 8k GNO.\n\n## Specification\n\nIf this proposal\ - \ is approved, Gnosis DAO will be incentivising the growth of [USDC.e](https://gnosisscan.io/token/0x2a22f9c3b484c3629090feed35f17ff8f88f76f0),\ - \ which is compliant with the standard and that can be acquired by calling Deposit()\ - \ on a [Transmuter](https://gnosisscan.io/address/0x0392a2f5ac47388945d8c84212469f545fae52b2).\ - \ The swap of the old USDC to the new one can also be done through the bridge UI.\ - \ New USDC bridged to Gnosis will automatically be USDC.e thanks to changes in the\ - \ bridge UI.\n\nkarpatkey will define the allocation of the incentives, based on\ - \ what is deemed the most suitable action on Gnosis Chain. Under this same post,\ - \ we will be reporting the updates of the program, detailing how much was spent,\ - \ on which pools/protocols, and which results we have achieved.\n\nThe program will\ - \ run until USDC is natively issued on Gnosis, and we have ensured that it is well\ - \ integrated into DeFi.\n\nThe objective of the proposal, however, is not just bringing\ - \ capital, but also users. Incentives will be directed to guide specific behaviours\ - \ that will make users sticky. Gnosis is building a set of products that are already\ - \ finding Product Market Fit - Gnosis Pay being an example of that. It is the right\ - \ timing to launch an incentives program to bootstrap the ecosystem. In the end,\ - \ the results of the program should be:\n\n 1. Have native USDC\n 2. Have more\ - \ users in Gnosis Chain\n 3. Have more capital on Gnosis Chain, as a result of\ - \ 1 and 2, and regardless of having some capital flying away.\n\n\n\nAs two examples\ - \ of some strategies that could be utilised to incentivise wanted behaviours:\n\n\ - \ * Reward (more) users that deposit USDC in Aave/Spark, borrow EURe and spend\ - \ it with Gnosis Pay.\n * Reward users that make a large TWAP of USDC for GNO,\ - \ by giveing them a certain % on top of what they bought (depending on the size\ - \ and time extension of the TWAP).\n\n\n\n## Rationale\n\nThe adoption of a compliant\ - \ USDC token on Gnosis Chain is crucial for enhancing its DeFi ecosystem, as it\ - \ is a requirement for native USDC and CCTP. Having native USDC will help bring\ - \ Gnosis Chain closer to CeFi, and CCTP will lower the costs of bridging in and\ - \ out. Additionally, native USDC will provide significant advantages for Gnosis\ - \ Pay, allowing its worldwide expansion.\n\n## Budget\n\nThis program aims to direct\ - \ up to 8k GNO in incentives. Assuming that we need to pay a ~10% APY for incentives\ - \ and that we achieve significant size (eg., 50M) in 6 months, this translates to\ - \ roughly ~$2.5M.\n\nThis proposal requests 8k GNO, which accounts for potential\ - \ market volatility. We will continuously work on optimising incentive allocation\ - \ which may result in the desired growth in a shorter time frame and/or with fewer\ - \ incentives paid out. In this case, the surplus budget will remain unallocated.\n\ - \n8 Likes\n" -start: 1718118995 -end: null -state: [] -author: null -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 8k - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-104.yml b/public/GIPs/GIP-104.yml deleted file mode 100644 index 319ad729..00000000 --- a/public/GIPs/GIP-104.yml +++ /dev/null @@ -1,302 +0,0 @@ -id: '0x61846fd39613dc0858b1df2d52155e01211ba17f6ad7b7f689e4f287124805bd' -gip_number: '104' -url: https://snapshot.org/#/gnosis.eth/proposal/0x61846fd39613dc0858b1df2d52155e01211ba17f6ad7b7f689e4f287124805bd -title: Should the GnosisDAO Enhance Awareness and Adoption of the Shutterized Gnosis - Chain by Providing a Grant for Marketing Activities? -body: 'Link to forum post: https://forum.gnosis.io/t/gip-104-should-the-gnosisdao-enhance-awareness-and-adoption-of-the-shutterized-gnosis-chain-by-providng-a-grant-for-marketing-activities/8700/1 - - - - GIP: 104 - - title: Grant for Marketing Activities: Enhance Awareness and Adoption of Shutterized - Gnosis Chain - - author: brainbot gmbh - - status: Proposed - - type: Funding - - created: 2024-06-17 - - - duration: 6 months - - funding: 40,000 xDAI + 100 GNO - - - - ## Executive Summary - - - brainbot seeks a grant of 40,000 xDAI + 100 GNO from Gnosis DAO to expand our marketing - campaign in support of the launch of Shutterized Gnosis Chain. Our goal is to amplify - awareness of Shutterized Gnosis Chain and its benefits to end users - protection - against malicious MEV and censorship. Our intended impact is to achieve widespread - adoption - increase users and transactions on Shutterized Gnosis Chain. The two - primary foci of these marketing activities will be 1) to hire and direct Wachsman, - a PR agency to promote the launch and all activities around it and 2) to put a heavy - focus on IRL events such as ETHCC, hackathons and various meetups. - - - The activities under this grant will run through Q3 and Q4 2024. - - - ## Specification - - - **Opportunity:** - - - Gnosis Chain, Nethermind and brainbot recently announced the [launch of Shutterized - Chiado testnet](https://blog.shutter.network/the-first-shutterized-testnet-is-now-live-on-chiado/). - We are now working together to launch Shutterized Gnosis Chain in early July 2024. - - - Shutterized Gnosis Chain will be a significant milestone for a Gnosis Chain and - its users. Gnosis Chain will become the first blockchain to implement threshold - encrypted mempools, which protect end users against malicious MEV and censorship - using decentralized technology. - - - **Initiative:** - - - brainbot is spearheading a comprehensive marketing campaign to ensure a successful - launch of Shutterized Gnosis Chain. The campaign aims to: - - - - further promote Gnosis Chain as the leading blockchain implementing crypto’s core - values: decentralization, permissionlessness, accessibility, information symmetry - etc. - - - - highlight Gnosis Chain’s growing DeFi ecosystem - - - - raise awareness that Gnosis Chain is now the “safe blockchain”, where degens can - trade without fear of malicious MEV (such as front running and sandwich attacks) - - - raise awareness that Gnosis Chain is also the “censorship resistant blockchain”, - where users can be assured that their transactions are a) included, b) treated equally - and fairly regardless of their content - - - - increase the satisfaction / NPS of defi traders on Gnosis Chain - - - - increase the percentage of protected transactions on Gnosis Chain - - - - growth in social media engagement and followers (Gnosis Chain and Shutter accounts) - - - - achieve media coverage for the launch of Shutterized Gnosis Chain - - - Stretch goals: - - - - increase the total number of users and total value locked (TVL) on Gnosis Chain - - - - increase the total number of monthly transactions on Gnosis Chain - - - ## Budget - - - ### Total Requested Funding: 40,000 xDAI + 100 GNO - - - The reason to request the GNO portion of the grant is to increase long term alignment - between the projects. - - - ### Budget Breakdown (estimated): - - - - - | **Head of Marketing** | Plan and orchestrate the campaign | $12k | - - | **2 x Protocol Developers (part time)** | Assist dApp builders and hackathon teams - | $16.5k | - - | **Social Media Manager** | Social media engagement | $8k | - - - | **Designer** | Create brand & design assets related to Shutter x Gnosis | $6k - | - - | *PR Agency** | Wachsman agency for Public relations, media coordination, policy - liaison | $11.5k | - - | **KOL Agency** | KOL activation, social media engagement | $6k | - - - | **Events** | Community and core developer engagement | $10k | - - | **Survey** | Incentivise responses for survey regarding satisfaction / NPS | $3.5k - | - - - ## Marketing Activities - - - ### Shutterized Gnosis Chain Events and Proposals (subject to change) - - - **“Defenders of the Crypto Realm” Movement:** - - - Launching a movement to address systematic manipulation across blockchains. Collaboration - and input from Gnosis is sought. - - - **Gnosis Berlin Meetup (Thu, June 20):** - - - - Presentation about Shutterized Gnosis Chain - - - **Press Release (approx 4 weeks before launch of Shutterized Gnosis Chain):** - - - - Joint press release - - - - Organize media engagements (interviews, op-eds, etc.) - - - - Seek media relationships for engagement - - - **ETHCC Activations:** - - - - Conference Bingo - - - - “Sandwich Attack!” - a Popup Piñata Party - - - Rock Paper Scissors Challenge - - - **ETHCC Breakfast Side Event (Wed, July 10th):** - - - - Co-curated agenda - - - - Co-branded event - - - **Hackathons (confirmed)** - - - - ETHGlobal Singapore (Sept 20-22) - - - - ETHSan Francisco (Oct 18-20) - - - - ETHBangkok (Nov 15-17) - - - **Hackathons (prospective)** - - - EthWarsaw (Sept 5-8) - - - - EthRome (Oct 4-6) - - - **Other Events (prospective)** - - - Web3Privacy Summit Rome (Oct 4) - - - **Bounty Ideas:** - - - - Wallet with integrated Shutter encryption functionality (e.g., fork MetaMask) - - - - Web application to encrypt raw transactions - - - - Self-deployable RPC proxy server for transaction encryption - - - - Analytics on Shutter transaction schedules, queue status, costs, etc. - - - - Projects requiring privacy/non-frontrunnability - - - ## Existing Grant - - - Shutter DAO 0x36 has already provided brainbot with a grant for 180,000 USDC and - 60,000 SHU to support this marketing campaign. Additional funding from Gnosis DAO - will significantly enhance the reach and impact of this campaign. - - - ## Team/Organization - - - **brainbot gmbh:** We are a core developer of Shutter and a contributor to Shutter - DAO 0x36. We are seasoned team with extensive experience in blockchain marketing, - supported by external consultants and agencies. - - - ## Conclusion - - - The proposed grant will enable brainbot to execute a robust marketing campaign surrounding - the launch of the Shutterized Gnosis Chain in Q3 and Q4 2024. The marketing campaign - will focus on hiring and directing a PR agency to promote the launch and all activities - around it , and hosting/supporting IRL events including ETHCC, hackathons and meetups. - The marketing campaign will increase awareness of the benefits to end users (e.g. - protection against malicious MEV and censorship) and achieve widespread adoption - (e.g. increase users and transactions on Shutterized Gnosis Chain). The proposed - grant will benefit Gnosis Chain and the Gnosis ecosystem. - - - --- - - - **Voting Options:** - - - - **In favour:** Approve the grant to brainbot gmbh - - - - **Against:** Do not approve the grant - - - - **License:** CC0 1.0' -start: 1719394436 -end: 1719999236 -state: closed -author: '0xD31e0eEC136353bc77b49d1FEE27292A8b5bdc93' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 95408.28506152742 -scores: - - 93950.35503056496 - - 1148.4008925661433 - - 309.5291383963267 -votes: 100 -quorum: 75000 -funding: - amount: 40,000 - currency: xDAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-105.yml b/public/GIPs/GIP-105.yml deleted file mode 100644 index 7455910b..00000000 --- a/public/GIPs/GIP-105.yml +++ /dev/null @@ -1,145 +0,0 @@ -id: '0x54f2e2519c44ed728148dbe3dbef29c5c91d5ab8fdbade1c909b9a6d16bcdec5' -gip_number: '105' -url: https://snapshot.org/#/gnosis.eth/proposal/0x54f2e2519c44ed728148dbe3dbef29c5c91d5ab8fdbade1c909b9a6d16bcdec5 -title: Should GnosisDAO support v2 Gnosischa.in Explorer hosted by beaconcha.in? -body: 'https://forum.gnosis.io/t/gip-105-should-gnosisdao-support-v2-gnosischa-in-explorer-hosted-by-beaconcha-in/8713 - - - - - ``` - - GIP: 105 - - title: Should GnosisDAO support v2 Gnosischa.in Explorer hosted by beaconcha.in? - - author: butta - - status: Proposed - - type: Funding - - created: 2024-06-19 - - duration:1 year - - funding: $300,000 annually + $100,000 one-time integration fee - - ``` - - - ## Category - - - Infrastructure projects - - - ## Executive Summary - - - As some of you have seen on [X](https://x.com/beaconcha_in/status/1801223159334539776), - beaconcha.in has launched a beta for the [v2 explorer](https://v2-beta-holesky.beaconcha.in/). - It introduces several new features, including real-time monitoring of up to 100,000 - validators, the ability to group validators, and options to share custom dashboards. - - - Our next steps are to rework the notification system, introduce an account dashboard - for transactions, new APIs, new mobile App and more. - - - Due to these upcoming changes, we stopped contributing to the v1 explorer codebase - a few months ago. We expect to fully migrate to the v2 explorer sometime next year. - Because of this, we would love to have Gnosischain on our v2 [open source](https://github.com/gobitfly/beaconchain) - explorer. - - - Voting in favor of this proposal will ensure a smooth transition from v1 to v2 for - gnosischain. - - - ## Specification - - - One major criticism from the Gnosis community was the cap of 280 validators in the - dashboard and app. This limit was due to technical constraints, not our unwillingness - to increase it. Additionally, our old pricing did not differentiate between networks. - - - We have listened to your feedback and propose the following for the v2 explorer: - - - - Free users can monitor up to 20 validators, [which matches the average number - for most Gnosis users](https://docs.google.com/presentation/d/1IEPVvOE3T6B-a3NJVt3ws4LXXqc_h-QG-lw8wVoLgH8/edit#slide=id.g27a35603b14_0_1314) - - - - Subscribed users can monitor up to 100,000 validators. - - - - All features mentioned here: https://v2-beta-holesky.beaconcha.in/pricing will - also be available for Gnosis. - - - - Premium plans will offer a significantly higher validator limit for Gnosis compared - to Ethereum, integrated within the existing pricing tiers. - - For example, if Pricing Tier “[Guppy](https://v2-beta-holesky.beaconcha.in/pricing)” - supports 100 Ethereum validators, it will support a higher number of Gnosis validators, - may support up to 500. - - This means users will only need one subscription to increase their limits on Ethereum - and gnosis. - - - The exact number for the Gnosis validator limit will be determined when we start - integrating Gnosis. - - ![|170x508](https://forum.gnosis.io/uploads/default/optimized/2X/9/9a84595530f108da0687aa5c1e95f1e9f7a31291_2_250x750.png) - - - ## Budget - - - $300,000 annually - - 60% in USD/USDC - $180k USDC/USDT - - 40% in GNO - $120k in GNO (2 Year lockup) - - +one-time v2 integration fee $100,000 - - 100% in USDC/USDT - - - Our address `0x9d4E94dB689Bc471E45b0a18B7BdA36FcCeC9c3b` (beaconchain.eth) - - - ## Timeline, Implementations and Deliverable - - - Since [gnosischa.in ](http://gnosischa.in)is already up and running, there are no - milestones necessary for v1. (See [GIP-74](https://forum.gnosis.io/t/gip-74-should-gnosisdao-support-gnosischa-in-explorer-hosted-by-beaconcha-in/6228?u=butta)) - - - Voting in favor of this proposal will ensure a smooth transition from v1 to v2 for - gnosischain and will cover the costs of v1-gnosischa.in for 1 year.' -start: 1719496255 -end: 1720101055 -state: closed -author: '0xD67952D9a8F27003De7C94D4A76191831165C01C' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 79562.13359555315 -scores: - - 78176.66390498745 - - 1238.3172390059644 - - 147.15245155972278 -votes: 103 -quorum: 75000 -funding: - amount: 300,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-106.yml b/public/GIPs/GIP-106.yml deleted file mode 100644 index 287def27..00000000 --- a/public/GIPs/GIP-106.yml +++ /dev/null @@ -1,72 +0,0 @@ -id: gip-106-should-gnosisdao-reinstate-full-rewards-for-eligible-gnosisvip-validator-nodes -gip_number: 106 -url: https://forum.gnosis.io/t/gip-106-should-gnosisdao-reinstate-full-rewards-for-eligible-gnosisvip-validator-nodes -title: Should GnosisDAO Reinstate Full Rewards for Eligible GnosisVIP Validator Nodes? -body: "#### Category\n\nFunding - Rewards\n\n#### Executive Summary:\n\nThis proposal\ - \ aims to revisit and restore the original reward policy for the GnosisVIP event.\ - \ The event’s initial rules allowed participants to set up validator nodes across\ - \ 104 countries, with the first 10 nodes in each country being eligible for rewards.\ - \ The original rules can be reviewed [here](https://web.archive.org/web/20230922135332/https://www.gnosis.builders/post/introducing-gnosisvip).\n\ - \nGnosisVIP is getting concluded due to the retirement of Builders Team which launched\ - \ this event. However, the team that took over the reward distribution decided to\ - \ cut down the rewards for participants who run more than one validators, citing\ - \ concerns about farming. The announcement can be found [here](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8).\n\ - \nSince there is no restriction in the rules against multiple validator nodes with\ - \ unique IP addresses, and all those eligible validators contribute equally to geo-diversity\ - \ in this event, this proposal seeks to ensure participants receive the full rewards\ - \ as originally promised. This will maintain fairness and trust within the Gnosis\ - \ community.\n\n#### Specification\n\nThe proposed reward program aims to restore\ - \ the original terms of the GnosisVIP event:\n\n * Full Rewards for Eligible Nodes:\ - \ All validator nodes that meet the criteria (first 10 in their respective countries)\ - \ should receive their promised rewards according to their validating duration,\ - \ irrespective of whether they are run by the same entity.\n\n\n\nThis approach\ - \ will help the broader Gnosis ecosystem by maintaining predictability and trust\ - \ within the Gnosis community.\n\n#### Rationale\n\nThe motivation behind this proposal\ - \ is to uphold fairness and trust within the Gnosis community. The original rules\ - \ did not prohibit running multiple nodes from different IP addresses, and participants\ - \ should be rewarded based on those terms. Changing the reward policy retroactively\ - \ undermines trust and can discourage future participation.\n\n#### Budget\n\nAccording\ - \ to the [google sheet](https://docs.google.com/spreadsheets/d/1Ix4Cu2aiNr0XzwILqWSZqY3dcPiwQhMEMSF50QVvDrQ/edit?usp=sharing)\ - \ in the [sunsetting announcement](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8),\ - \ a total of 16 validators from 10 participants are affected by the reduced rewards.\n\ - \nThe expected amount of rewards to make up is as follows:\n\nWithdrawal Address\ - \ | Affected Validators | Duration | Affected Rewards | Notes \n---|---|---|---|---\ - \ \n…6b20 | 1 | 9 Mo | 5.25 GNO | \n…4cd8 | 1 | 12 Mo | 10.5 GNO | \n…bc0c\ - \ | 1 | 12 Mo | 10.5 GNO | \n…02fc | 1 | 12 Mo | 10.5 GNO | \n…9bc1 | 2 | 6\ - \ Mo | 4.8 GNO | \n…20a0 | 3 | 12 Mo | 35.7 GNO | \n…db02 | 1 | 9 Mo | 5.25\ - \ GNO | \n…ab14 | 2 | 12 Mo | 23.8 GNO | \n…4765 | 1 | 6 Mo | 2.25 GNO | \n\ - …a88a | 3 | 6 Mo | 7.65 GNO | *Newly Added \n**Total** | **16** | | **116.2 GNO**\ - \ | \n \nEdit: The google sheet seems updated after initially drafting this post,\ - \ updated the numbers to match that.\n\n#### Conclusion\n\nRestoring the original\ - \ GnosisVIP rewards policy is essential for maintaining fairness and trust within\ - \ the community. By honoring the original rules, we can ensure that all participants\ - \ are treated equitably and avoid reputational risk for the Gnosis ecosystem. This\ - \ proposal seeks the support of the GnosisDAO community to uphold the integrity\ - \ of our events and promote a decentralized and robust network.\n\n2 Likes\n\n[Staworth\ - \ / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/3)\n" -start: 1720191111 -end: null -state: - - phase-1 -author: '@dao - - status: Draft - - typ…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-107.yml b/public/GIPs/GIP-107.yml deleted file mode 100644 index 60c93c1c..00000000 --- a/public/GIPs/GIP-107.yml +++ /dev/null @@ -1,44 +0,0 @@ -id: '0x3408dc58da4a04a54352ff6561948ec48ff1d1683bacdad79851e92c5796ce78' -gip_number: '107' -url: https://snapshot.org/#/gnosis.eth/proposal/0x3408dc58da4a04a54352ff6561948ec48ff1d1683bacdad79851e92c5796ce78 -title: Should the GnosisDAO form, in addition to the Gnosis Asset Holdings I Foundation, - a legal conduit to continue to foster Gnosis´ decentralization goals? -body: "The GnosisDAO (the “DAO”) approved, with the successful passage of GIP-94,\ - \ the establishment of a legal conduit, Gnosis Asset Holdings I Foundation, which\ - \ was set up to onboard Centrifuge Prime (as described in GIP-94) and to also hold\ - \ other illiquid investments, including those made historically by the Gnosis Builders\ - \ as described in GIP-96.\n\nThis proposal intends to seek a vote from the DAO to\ - \ establish another legal conduit, the Gnosis Operations Foundation (the “Foundation”),\ - \ to provide the DAO with an additional mechanism for executing work in a decentralized\ - \ environment.\n\nFor reference: \n\nGIP-94 https://forum.gnosis.io/t/gip-94-should-the-gnosisdao-approve-the-gnosis-assets-holding-i-foundation-for-onboarding-into-centrifuge-prime/8331\n\ - \nGIP-96 https://forum.gnosis.io/t/gip-96-should-the-gnosisdao-allow-the-legal-conduit-being-set-up-to-onboard-centrifuge-prime-to-also-hold-other-investments-including-those-made-by-the-gnosis-builders-prior-to-their-dissolution/8334\n\ - \nPricing and payment\n\nThe pricing for this proposal is structured to streamline\ - \ fees.\n\nThe fee structure is as follows:\n\nFees\t\t\nStructural Setup up to\ - \ 50,000 USDC - To be paid immediately for lawyers and Cayman service providers\ - \ to set up a Cayman foundation company to the benefit of the DAO, any unused budget\ - \ will be returned to the DAO treasury. The structure may require ongoing fees but\ - \ will be assessed on a periodic basis and only after approval from the DAO.\n\n\ - Ongoing per annum governance and corporate expenses estimated at 45,000 USDC\tto\ - \ be paid for provision of registered office, Secretary services, Supervisor, Director,\ - \ MLRO/DMLO services." -start: 1721149815 -end: 1721754615 -state: closed -author: '0x5E34844E32A34a50C599f3A443B4054312896c12' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 96652.48401856198 -scores: - - 96647.45470446914 - - 3.0250914956826676 - - 2.004222597151167 -votes: 103 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-108.yml b/public/GIPs/GIP-108.yml deleted file mode 100644 index 17742495..00000000 --- a/public/GIPs/GIP-108.yml +++ /dev/null @@ -1,190 +0,0 @@ -id: gip-108-should-gnosisdao-honor-the-original-rewards-for-gnosisvip-before-the-distribution-schedule-was-modified-this-proposal-does-not-reward-additional-nodes-with-the-same-withdrawal-address -gip_number: 108 -url: https://forum.gnosis.io/t/gip-108-should-gnosisdao-honor-the-original-rewards-for-gnosisvip-before-the-distribution-schedule-was-modified-this-proposal-does-not-reward-additional-nodes-with-the-same-withdrawal-address -title: Should GnosisDAO honor the original rewards for GnosisVIP before the distribution - schedule was modified (this proposal does not reward additional nodes with the same - withdrawal address)? -body: '## Category - - - Funding - Rewards - - - ## Executive Summary - - - While GIP-106 aims to reinstate GnosisVIP rewards for nodes with the same withdrawal - address, this proposal is different and **aims to honor the higher rewards as originally - announced**. Due to challenges, the Builders Team delayed the distribution of rewards, - to be after 6 months of validation. The Builders Team also reduced the rewards for - the initial months. The original rewards can be reviewed [here](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip). - The original rewards should be maintained because they were heavily promoted by - Gnosis social media and PR, and induced validators to join in reliance on this announcement. - This would maintain fairness and trust about the Gnosis brand. - - - ## Background - - - A co-founder of Flashbots [advocated for geographical decentralization](https://collective.flashbots.net/t/decentralized-crypto-needs-you-to-be-a-geographical-decentralization-maxi/1385) - (might not have motivated GnosisVIP but explains the importance of the program). - Shortly after, Gnosis Builders (whose funding was approved in GIP-38) allocated - 5 million USD for GnosisVIP, a program aimed at increasing the number and diversity - of validators. There was no term reserving the right to modify the rewards at any - time. **The announcement, referring to 388 mGNO for 6 months, was promoted by Gnosis - social media and PR including on[Cointelegraph](https://cointelegraph.com/news/gnosis-chain-spends-5m-on-validator-incentive-program-for-decentralization).** - - - In the original post, payments were expected within 90 days of each month of validation. - Due to technical or logistical challenges, the Builders Team delayed the distribution - of rewards, to be after 6 months of validation. The Builders Team also reduced the - rewards for the initial months. - - - ## Specification - - - This proposal aims to restore the original rewards for GnosisVIP before the distribution - schedule was modified. [Originally](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip), - the monthly breakdown added up to 388 mGNO (38+48+58+68+78+98). The cumulative reward - for 6 months amounted to 12.125 GNO (388/32). - - - In June 2024, validators for 6 months received 3 GNO, and validators for 9 months - received a total of 7 GNO. **This proposal would disburse the difference with 12.125 - GNO.** This approach would maintain trust and predictability in contractual relations - with the Gnosis brand. - - - According to the [Google Sheet](https://docs.google.com/spreadsheets/d/1Ix4Cu2aiNr0XzwILqWSZqY3dcPiwQhMEMSF50QVvDrQ/edit?usp=sharing) - in the [sunsetting announcement](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8), - around 29* validators are affected by the reduced rewards. As calculated in the - Budget, this would amount to 139.625 GNO to 29 validators. - - - *Nodes whose rewards were reduced due to having the same withdrawal address are - not included in this GIP for simplicity and for avoidance of a conflict with GIP-106. - These operators can advocate for rewards outside my proposal. - - - ## Rationale - - - Changing the reward amounts retroactively would undermine trust, discourage future - relations with Gnosis entities, and breach the offered contract. - - - ### Honoring the contract: - - - As [LegalVision UK puts it](https://legalvision.co.uk/commercial-contracts/unilateral-contract/), - “In a unilateral contract, **legal relations between the offeror and offeree form - when the offeree begins to try to complete the specified act as part of the contract.** - As a result, if you are the offeror, you will have a binding contract and will not - be able to rescind your offer.” The offer of 388 mGNO was seen by over 4000 on Cointelegraph, - and the bulk of interactions was with Gnosis Builders’ first announcement. It would - be unfair to rescind this offer after operators began getting hardware / setting - up validators. - - - ### Not all validators were given the chance to validate for 12 months for full - rewards: - - - The program was closed without equal opportunity to complete 12 months of validation. - April 19, 2024 [was set](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/7) - as the final deadline of Gnosis VIP. That means all validators would have needed - to join as soon as the announcement came out in 2023 to validate for 12 months. - This is contrary to the [blog post](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip) - allowing nodes to be “starting **after** April 19, 2023” and the announced intention - “to further diversify the network to have validators in at least 100 countries **by - the end of the year** ”. It suggests that nodes had at least until the end of 2023 - to start validating as long as they were within the first 10 in an eligible country. - It implies it would take until late 2024 to give operators a fair opportunity for - performance that the offer called for. **Since the modified reward schedule calling - for 12 months of validation was made practically impossible to perform on time for - nodes not joining quickly but still joining in 2023 as intended by Gnosis Builders, - at least the original 12.125 GNO that were announced for 6 months of validation - should be honored.** - - - Personally, I’ve also been asking for clarity on the reward plans since November - 2023 when my hardware broke, but was never told I needed to find a way to continue - from 6 to 12 months (read my Personal Story below). Neither did I receive the rewards - that were promised month-to-month when I joined on May 6, 2023, that could have - been reinvested in new hardware. - - - ### The DAO had indirectly approved the initial program and now directly holds GnosisVIP - participant funds: - - - **The Builders initiative was approved in GIP-38 and[Builders returned their funds](https://forum.gnosis.io/t/gnosis-builders-2023/7814); - there is a portion of these funds that had been promised to GnosisVIP participants - when announcing GnosisVIP.** Luckily, 139.625 GNO is small compared to the 5 million - USD that Gnosis Builders had allocated to the program. - - - ## Budget - - - My methodology was forking the reward sheet as of July 9, 2024, adding an “Affected - Reward” column calculating the difference between 12.125 GNO and the amount for - those nodes paid for 6 or 9 months. [The total sum of this column is 139.625 GNO](https://1drv.ms/x/c/0f6fd8b64fab0138/EfO34nlrw-pPplD3CodJTawByDiZTWzXD_PvVmpm5dK6KA?e=HB5Fg1). - - - Nodes having already received 14 GNO are not impacted. Nodes whose rewards were - reduced due to having the same withdrawal address are not in the scope of this GIP. - - - The following would need to be distributed: - - - ![GIP-108 Sheet](https://forum.gnosis.io/uploads/default/original/2X/d/d9157b016d02ea851864ae759274a16b958b224c.png) - - - ## Personal Story - - - As I’ve [posted on Discord](https://discord.com/channels/502416149343109121/1124140637428666368/1178659200109387826) - in November 2023, I experienced a hardware failure after 6 months in the program - after joining on May 6, 2023. Although [I advocated](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/2) - to harmonize the initial announcement with the reward change to not make something - akin to a “rug” of the initial announcement, I have not received a response. I was - never told that the original program that I relied on would not be honored unless - I repaired my hardware and came back. Anyway, if this proposal passes, I will purchase - new hardware and add a LatAm node again. - - - ## Conclusion - - - By honoring the original rewards, we can ensure that all participants are treated - equitably and avoid reputational risk for the Gnosis ecosystem. - - - [Staworth / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/3) - - ' -start: 1720590929 -end: null -state: - - phase-2 -author: null -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-109.yml b/public/GIPs/GIP-109.yml deleted file mode 100644 index 5027d1d4..00000000 --- a/public/GIPs/GIP-109.yml +++ /dev/null @@ -1,38 +0,0 @@ -id: '0x00a840e823e75f4c722db046312fca39e02f3cc75ccf235ed436bec4328d39dc' -gip_number: '109' -url: https://snapshot.org/#/gnosis.eth/proposal/0x00a840e823e75f4c722db046312fca39e02f3cc75ccf235ed436bec4328d39dc -title: 'Should the GnosisDAO introduce Snapshot moderators to reduce spam? ' -body: "The Gnosis DevOps team is currently performing a review and overhaul of the\ - \ GnosisDAO’s Snapshot space. We would like to add trusted moderators that have\ - \ the ability to remove posts that they deem to be low-quality with the goal of\ - \ reducing spam proposals created in the GnosisDAO’s snapshot space.\n\nFor security\ - \ reasons, the GnosisDAO Snapshot space does not have Admins. In order to introduce\ - \ moderation, the GnosisDAO needs to grant the DevOps team permission to modify\ - \ the Snapshot settings.\n\nAdding trusted moderators was originally proposed in\ - \ GIP-77, which never went to Snapshot for onchain voting.\n\nThis GIP proposes\ - \ to elect the following moderators: Manuel Bondy, Armagan Ercan, and John Szczepaniak\ - \ who are trusted contributors of the GnosisDAO.\n\nhttps://forum.gnosis.io/t/gip-77-should-the-gnosisdao-add-delegation-spam-reduction/6362\n\ - \nModeration guidelines are taken from A Code of Conduct for Open Source Communities,\ - \ a widely recognized code of conduct that empowers groups to facilitate healthy,\ - \ constructive community behavior. \n\nhttps://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md" -start: 1722285323 -end: 1722890123 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 3942.0559244190677 -scores: - - 3933.78661298226 - - 0.004055107606205518 - - 8.265256329200938 -votes: 72 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-11.yml b/public/GIPs/GIP-11.yml deleted file mode 100644 index b20bf65f..00000000 --- a/public/GIPs/GIP-11.yml +++ /dev/null @@ -1,132 +0,0 @@ -id: QmNMRBnipvRfos9ze1MrKpFAsHqxhNrmxjrXzxJnhFif9b -gip_number: '11' -url: https://snapshot.org/#/gnosis.eth/proposal/QmNMRBnipvRfos9ze1MrKpFAsHqxhNrmxjrXzxJnhFif9b -title: Enable SafeSnap -body: '## Simple Summary - - This is a proposal to update the GnosisDAO''s governance structure in a way that - keeps the benefits of off-chain voting while allowing for trustless and permissionless - on-chain execution, using the recently released [DAO module and SafeSnap plugin](https://blog.gnosis.pm/introducing-safesnap-the-first-in-a-decentralized-governance-tool-suite-for-the-gnosis-safe-ea67eb95c34f). - - - ## Motivation - - The current governance structure is designed to be maximally inclusive: gas-free - voting with delegation. This, however, comes at the cost of some additional trust - in the system. Primarily, GnosisDAO must trust that the GnosisDAO Safe multi-sig - will faithfully execute its will on-chain. - - - In order to make the GnosisDAO more autonomous, we should more meaningfully give - it control over its on-chain execution. - - - ## Specification - - Gnosis Ltd recently developed the [DAO module](https://github.com/gnosis/dao-module) - and [SafeSnap Snapshot Plugin](https://github.com/snapshot-labs/snapshot.js/tree/master/src/plugins/daoModule). - - - In combination with the Gnosis Safe, this tool allows for: - - - * Trustless and permissionless on-chain execution of arbitrary function calls - - * Continued use of our existing Snapshot strategies (ERC20 BalanceOf and Delegated - ERC20 BalanceOf) - - * Cheap/free and low friction participation for Participants. - - - ## Rationale - - As described in the [SafeSnap announcement post](https://blog.gnosis.pm/introducing-safesnap-the-first-in-a-decentralized-governance-tool-suite-for-the-gnosis-safe-ea67eb95c34f), - the path to progressive decentralization can be broken down into three steps. - - - 1. **Multi-sig as a proxy:** Gnosis Safe + Snapshot, in which the multi-sig promises - to act in accordance with the off-chain votes. This is the status quo. - - 2. **Multi-sig as a safeguard:** Gnosis Safe + Snapshot + SafeSnap, in which on-chain - execution of off-chain votes is handled by the SafeSnap module, but there are still - multi-sig owners that can veto malicious actions or act quickly in the case of an - emergency. - - 3. **Look ma, no hands!:** Gnosis Safe + Snapshot + SafeSnap, in which the multi-sig - owners have been removed, and the only way to execute transactions is via the SafeSnap - module. - - - This proposal is to move from (1) to (2) by deploying an instance of the DAO module, - enabling it in the GnosisDAO Gnosis Safe, and updating the GnosisDAO Snapshot space - to include the SafeSnap module. - - - ## Implementation - - The DAO module should have the following parameters set: - - - * **Oracle:** GNO denominated instance of Reality.eth `0x8f1CC53bf34932591177CDA24723486205CA7510` - - * **Reality question timeout:** `48 hours` - - * **Proposal cooldown:** `48 hours` - - * **Proposal expiration:** `7 days` - - * **Minimum bond:** `10 GNO` - - * **Question Template:** [see this document](http://gateway.pinata.cloud/ipfs/QmP5ptVAmAcBLJB5bpZntADLieaWRc2iN2V8UQBRoQDA56) - - * **Arbitrator:** Reality.eth contract, so that it is not possible to call arbitration - - `0x8f1CC53bf34932591177CDA24723486205CA7510` - - - - **Transactions that need to be executed:** - - - On the [`gnosis.eth` ENS name](https://app.ens.domains/name/gnosis.eth): - - * update  `snapshot`  text record to  `ipfs://QmPdrDbYVPCz6ASgYvvYWkdpDmZ7pph7TnT4K3zhq1dfP7` - - * update  `daorequirements`  text record to  `ipfs://QmP5ptVAmAcBLJB5bpZntADLieaWRc2iN2V8UQBRoQDA56` - - * set  `registrant`  and  `controller`  to  `0x0DA0C3e52C977Ed3cBc641fF02DD271c3ED55aFe` - - - On the [deployed DaoModule](0x0eBaC21F7f6A6599B5fa5f57Baaa974ADFEC4613): - - * update  `questionArbitrator`  to  `0x8f1CC53bf34932591177CDA24723486205CA7510` - - * update  `minimumBond`  to  `10 GNO` - - * update  `questionCooldown`  to  `48 hours` - - - On the [GnosisDAO''s safe](http://gnosis-safe.io/app/#/safes/0x0DA0C3e52C977Ed3cBc641fF02DD271c3ED55aFe/transactions): - - * call  `enableModule("0x0eBaC21F7f6A6599B5fa5f57Baaa974ADFEC4613")`' -start: 1624033800 -end: 1624638600 -state: closed -author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 91615.3018922983 -scores: - - 91615.3018922983 - - 0 - - 0 -votes: 112 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-110-redo0.yml b/public/GIPs/GIP-110-redo0.yml deleted file mode 100644 index 5b0f606b..00000000 --- a/public/GIPs/GIP-110-redo0.yml +++ /dev/null @@ -1,82 +0,0 @@ -id: '0xa1330504fe929b3ac98b20298f63359f68542670fbb51009db3f4ec6edfd5920' -gip_number: '110' -url: https://snapshot.org/#/gnosis.eth/proposal/0xa1330504fe929b3ac98b20298f63359f68542670fbb51009db3f4ec6edfd5920 -title: Should the Gnosis DAO create and fund a Gnosis Pay rewards program with 10k - GNO? -body: "## Summary\n\nThis proposal aims to create a cashback program for Gnosis Pay,\ - \ benefiting GNO holders. The program will feature five tiers of cashback rewards,\ - \ ranging from 1% to 4% based on the amount of GNO deposited in Gnosis Pay. An extra\ - \ 1% (1pp) will be awarded to Gnosis Pay OG NFT holders. Rewards will be airdropped\ - \ weekly to users ~7 days after their transactions, calculated based on the minimum\ - \ GNO balance held during the week the payment was made. The rewards, measured in\ - \ the currency of the payment, will be distributed in GNO using the Gnosis Chain\ - \ GNO/USD, EUR/USD or GBP/USD Chainlink (or Chronicle for GBP) price feed at the\ - \ time of distribution of the reward. A maximum of EUR 20,000, USD 22,000, or GBP\ - \ 18,000 will be eligible to accrue rewards per month for every user. \n\n## Rationale\n\ - \nAfter last year's outstanding growth, Gnosis Chain has stagnated, mainly due to\ - \ the substantial incentives offered by alternative L1s and L2s. However, many of\ - \ the users and capital in these other chains are likely to leave once the incentives\ - \ end. Gnosis aims to create sticky users through a suite of products, with Gnosis\ - \ Pay being the first. After months of improvements, Gnosis Pay is now ready for\ - \ mass adoption. This cashback program is strategically designed to bootstrap user\ - \ engagement without significant costs to the DAO. Users participating in the program\ - \ must have GNO in their Gnosis Pay Safe wallet, incurring an opportunity cost by\ - \ not staking their GNO. Thus, since GNO held in a Safe wallet will not be staked,\ - \ the additional cost to the DAO would be minimal compared to the benefits.\n\n\n\ - ## Implementation\n\nUsers who hold GNO in the Gnosis Pay Safe will be eligible\ - \ for cashback rewards on eligible Gnosis Pay Card transactions according to the\ - \ following tiers:\n\n* ≥0.1 GNO: 1%\n* ≥1 GNO: 2%\n* ≥10 GNO: 3%\n* ≥100 GNO: 4%\n\ - \nThe cashback percentage scales continuously within each tier (e.g., holding 5.5\ - \ GNO earns 2.5% cashback). Beyond 100 GNO, the cashback percentage does not increase\ - \ any further. Additionally, Gnosis Pay OG NFT holders who qualify for the airdrop\ - \ (with at least 0.1 GNO deposited) will receive an extra 1% cashback. For instance,\ - \ a user holding 5.5 GNO and the OG NFT would receive 3.5% cashback. This feature\ - \ will add value to future NFT campaigns by Gnosis Pay (e.g., referral programs).\n\ - \nA maximum of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue\ - \ rewards per month for every user. \n\nThe program will be administered and managed\ - \ by Karpatkey, responsible for tracking, determining, and distributing the rewards,\ - \ as well as reporting the results. The reward calculation code will be open source.\ - \ We will also provide an endpoint for those that want to feature the rewards in\ - \ their UIs. \n\nRewards will be distributed weekly, 5-12 days after the user made\ - \ the payment, based on the lowest amount of GNO tokens held in their Gnosis Pay\ - \ Safe during the week the payment was made. It is this amount of GNO held prior\ - \ to the card payment that will be relevant in calculating the cashback. For example,\ - \ having 1 GNO in the Gnosis Pay Safe and making a payment in the same week would\ - \ yield 2% cashback. However, topping up GNO to the Gnosis Pay Safe after a payment\ - \ does not change the cashback applicable to that payment. Eligible “payments” do\ - \ not include ATM withdrawals, which will not count towards card payments for the\ - \ purposes of this program. By participating in the program (transferring GNO to\ - \ the Gnosis Pay Safe), users agree that Gnosis Pay will share transaction details\ - \ related to ATM withdrawals with karpatkey. Transactions similar to this one on\ - \ essence (for example, topping up bank accounts with the card) will also not be\ - \ eligible, and this information will also be shared. However, personal information\ - \ will not be shared. The program will run until the budget runs off, or until the\ - \ DAO votes to terminate it or replace it. Cashback received from payments there\ - \ were refunded will tracked and until the users has a \"positive balance\" of accrued\ - \ rewards, no further payments will be made.\n\nShall this proposal passes, a trial\ - \ period will commence on August 19th, which will run for a week and will not accrue\ - \ any rewards. Then, the actual program will commence on August 26th.\n\nThe GNO\ - \ Cashback Program is sponsored by GnosisDAO, offered and administered by the Gnosis\ - \ DAO Operational Foundation, and operated by karpatkey in accordance with its mandate\ - \ from the Sponsor." -start: 1723190400 -end: 1723795200 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 57182.853752582116 -scores: - - 56806.56216965852 - - 93.8166241630919 - - 282.4749587604969 -votes: 93 -quorum: 75000 -funding: - amount: 20,000 - currency: EUR - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-110.yml b/public/GIPs/GIP-110.yml deleted file mode 100644 index 976d71f8..00000000 --- a/public/GIPs/GIP-110.yml +++ /dev/null @@ -1,112 +0,0 @@ -id: '0xd82b835664c4e15aaa704990a411628ee83edd95c017be190297b6f72df9e65a' -gip_number: '110' -url: https://snapshot.org/#/gnosis.eth/proposal/0xd82b835664c4e15aaa704990a411628ee83edd95c017be190297b6f72df9e65a -title: '[Redo]Should the Gnosis DAO create and fund a Gnosis Pay rewards program with - 10k GNO?' -body: '# Summary - - This proposal aims to create a cashback program for Gnosis Pay, benefiting GNO holders. - The program will feature five tiers of cashback rewards, ranging from 1% to 4% based - on the amount of GNO deposited in Gnosis Pay. An extra 1% (1pp) will be awarded - to Gnosis Pay OG NFT holders. Rewards will be airdropped weekly to users ~7 days - after their transactions, calculated based on the minimum GNO balance held during - the week the payment was made. The rewards, measured in the currency of the payment, - will be distributed in GNO using the Gnosis Chain GNO/USD, EUR/USD or GBP/USD Chainlink - (or Chronicle for GBP) price feed at the time of distribution of the reward. A maximum - of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue rewards per - month for every user. - - - # Rationale - - After last year''s outstanding growth, Gnosis Chain has stagnated, mainly due to - the substantial incentives offered by alternative L1s and L2s. However, many of - the users and capital in these other chains are likely to leave once the incentives - end. Gnosis aims to create sticky users through a suite of products, with Gnosis - Pay being the first. After months of improvements, Gnosis Pay is now ready for mass - adoption. This cashback program is strategically designed to bootstrap user engagement - without significant costs to the DAO. Users participating in the program must have - GNO in their Gnosis Pay Safe wallet, incurring an opportunity cost by not staking - their GNO. Thus, since GNO held in a Safe wallet will not be staked, the additional - cost to the DAO would be minimal compared to the benefits. - - - # Implementation - - Users who hold GNO in the Gnosis Pay Safe will be eligible for cashback rewards - on eligible Gnosis Pay Card transactions according to the following tiers: - - - ≥0.1 GNO: 1% - - ≥1 GNO: 2% - - ≥10 GNO: 3% - - ≥100 GNO: 4% - - The cashback percentage scales continuously within each tier (e.g., holding 5.5 - GNO earns 2.5% cashback). Beyond 100 GNO, the cashback percentage does not increase - any further. Additionally, Gnosis Pay OG NFT holders who qualify for the airdrop - (with at least 0.1 GNO deposited) will receive an extra 1% cashback. For instance, - a user holding 5.5 GNO and the OG NFT would receive 3.5% cashback. This feature - will add value to future NFT campaigns by Gnosis Pay (e.g., referral programs). - - - A maximum of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue rewards - per month for every user. - - - The program will be administered and managed by Karpatkey, responsible for tracking, - determining, and distributing the rewards, as well as reporting the results. The - reward calculation code will be open source. We will also provide an endpoint for - those that want to feature the rewards in their UIs. - - - Rewards will be distributed weekly, 5-12 days after the user made the payment, based - on the lowest amount of GNO tokens held in their Gnosis Pay Safe during the week - the payment was made. It is this amount of GNO held prior to the card payment that - will be relevant in calculating the cashback. For example, having 1 GNO in the Gnosis - Pay Safe and making a payment in the same week would yield 2% cashback. However, - topping up GNO to the Gnosis Pay Safe after a payment does not change the cashback - applicable to that payment. Eligible “payments” do not include ATM withdrawals, - which will not count towards card payments for the purposes of this program. By - participating in the program (transferring GNO to the Gnosis Pay Safe), users agree - that Gnosis Pay will share transaction details related to ATM withdrawals with karpatkey. - Transactions similar to this one on essence (for example, topping up bank accounts - with the card) will also not be eligible, and this information will also be shared. - However, personal information will not be shared. The program will run until the - budget runs off, or until the DAO votes to terminate it or replace it. Cashback - received from payments there were refunded will tracked and until the users has - a "positive balance" of accrued rewards, no further payments will be made. - - - Shall this proposal passes, a trial period will commence on August 19th, which will - run for a week and will not accrue any rewards. Then, the actual program will commence - on August 26th. - - - The GNO Cashback Program is sponsored by GnosisDAO, offered and administered by - the Gnosis DAO Operational Foundation, and operated by karpatkey in accordance with - its mandate from the Sponsor.' -start: 1724090400 -end: 1724695200 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 108877.93324315126 -scores: - - 86824.11901751305 - - 1545.5060773582968 - - 20508.308148279895 -votes: 158 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-111.yml b/public/GIPs/GIP-111.yml deleted file mode 100644 index b9916435..00000000 --- a/public/GIPs/GIP-111.yml +++ /dev/null @@ -1,190 +0,0 @@ -id: '0x7caff999b7a631b850b31439fe00fc733d1319b37b0ffd3e0a64145030606683' -gip_number: '111' -url: https://snapshot.org/#/gnosis.eth/proposal/0x7caff999b7a631b850b31439fe00fc733d1319b37b0ffd3e0a64145030606683 -title: Should the GnosisDAO fund the Ethereum Protocol Attackathon? -body: 'Summary: - - - Ethereum needs more security researchers to examine the codebase and help find vulnerabilities. - As the ecosystem has grown, this is an excellent opportunity to co-fund an audit - challenge with the Ethereum community. - - - The Ethereum Foundation (EF) invites sponsors to support the reward pool for the - eight-week Ethereum Attackathon. - - - This event aims to enhance the security of the Ethereum protocol by organizing the - largest crowdsourced security audit competition. The goal is to raise over $2 million, - with $500,000 committed from the Ethereum Foundation. - - - The Attackathon will be hosted on Immunefi, which they do at no cost, meaning all - contributions go directly to securing the protocol. - - - This challenge is especially relevant for Gnosis. Gnosis has a similar architecture, - is the only EVM with a beacon chain and uses the same clients. - - - A security bug bounty on the Ethereum core protocol benefits the Gnosis Chain by - identifying shared vulnerabilities, enhancing overall security, and fostering a - stronger developer community. This collaborative approach ensures cost-effective, - high-quality security improvements and maintains trust and interoperability between - the chains. - - - Duration: Eight weeks - - - Funding: 100,000 usd - - - Specification - - - What is an Attackathon? - - An Attackathon is a comprehensive event involving three phases: - - - Before the Attackathon: A comprehensive education program on the protocol’s code - delivered via live technical walkthroughs and Attackathon Academy content. - - - During the Attackathon, Security researchers hunt the code based on specific rules - to qualify for rewards. Only reports that are impactful as specified by the rules - of the Attackathon, will be rewarded. - - - After the Attackathon: Immunefi evaluates and compiles the results in the form of - an official Attackathon report and spotlights top researchers with NFT awards and - a leaderboard. - - - The Attackathon aims to be the largest-ever crowdsourced security audit contest - conducted to augment security for the entirety of the protocol’s code. - - - Rationale - - - The Ethereum Foundation has a permanent bug bounty, although it does not get the - awareness and eyeballs it should get on the code. - - - Running the largest audit contest now will help increase the security of the Ethereum - protocol and upskill security researchers for contests at every hard fork in the - future. - - - Shared Codebase and Vulnerabilities: Vulnerabilities in Ethereum could apply to - the Gnosis Chain due to their shared codebase. - - Security Enhancements: Ethereum’s security improvements directly enhance the Gnosis - Chain’s security boosting trust for Ethereum and Gnosis. - - Ecosystem: A secure Ethereum fosters a confident developer community, benefiting - the Gnosis Chain - - Cost-Effective Security: Aligning with Ethereum’s security efforts provides high-quality - assessments without bearing the total cost. - - Budget - - - We seek to raise at least $2 million, with the EF contributing $500k. So far, a - few projects have signed up to secure Ethereum. - - - Based on feedback, we created a couple of tiers, although a project can be sponsored - with any amount they wish. - - - Unicorn Partners (+75 ETH Commitment (Approx. $250,000) (limited to two projects) - - - 1x Unique NFT with leaderboard rank - - Participation in Attackathon Kick-off Twitter Space as a partner speaker - - Leaderboard Placement on Sponsor page - - Top-tier logo placement on Sponsor and Program Landing Page - - Top-tier logo placement on the Program Education page and program report - - Call out in Press Releases and EF and Immunefi Program Announcement Blogs - - Digital Logo Placement in the results announcement at Devon or a dedicated virtual - event - - 4x Devcon tickets - - 25% Discount on Crowd Sec offerings [transferable] - - 1x Dedicated Twitter post announcing sponsorship from Immunefi Twitter handle - - Panda Partners +30 ETH Commitment (Approx. $100,000) - - - 1x Unique NFT with leaderboard rank - - Leaderboard listing on the sponsor landing page - - Mid-roll logo placement on Sponsor and Program Landing Page - - 2x Devcon tickets - - 10% Discount on Immunefi Crowd Sec offerings [Transferable] - - 1x Dedicated Twitter post announcing sponsorship from Immunefi Twitter handle - - Key dates include: - - - July 8-11: EthCC program announcement - - - August 8: Detailed program announcement and education kickoff. - - 3rd Week of August: Attackathon hunting begins. - - Mid-October: Attackathon concludes, and results compilation begins. - - November 9-17: Results announced at Devcon. - - - Evaluation - - - The reports will be triaged by the Immunefi team and judged by EF and client team - security researchers. - - - Any unused funds will roll over to future audit contests and security research. - - - I look forward to hearing from the Gnosis community on helping secure the Ethereum - protocol.' -start: 1722624203 -end: 1723229003 -state: closed -author: '0xe6B6D216266B4a50f54cc1b266251dd602394B95' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 41150.97509727206 -scores: - - 707.2656131680784 - - 1182.5205036345596 - - 39261.18898046944 -votes: 77 -quorum: 75000 -funding: - amount: 2,000,000 - currency: USD (implied) - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-112.yml b/public/GIPs/GIP-112.yml deleted file mode 100644 index 870dd4a7..00000000 --- a/public/GIPs/GIP-112.yml +++ /dev/null @@ -1,107 +0,0 @@ -id: '0x509a53db27f35505fbae46855f39a5d2d274527ecf418a8fd7f0da03bc74aa49' -gip_number: '112' -url: https://snapshot.org/#/gnosis.eth/proposal/0x509a53db27f35505fbae46855f39a5d2d274527ecf418a8fd7f0da03bc74aa49 -title: Should the Gnosis Infrastructure team make changes to the GnosisDAO’s Snapshot - configurations? -body: "# Executive Summary\nThe Gnosis Infrastructure team is aiming to improve data\ - \ availability for the GnosisDAO’s subgraphs being consumed by the Snapshot Space.\n\ - \n- As part of the task there is a need for adopting the right indexing solution\ - \ which must provide highly available data for the subgraphs running on Gnosis Chain\ - \ and Ethereum Mainnet which, in turn, are consumed by the Snapshot space.\n- There\ - \ is a need for improving the current Snapshot strategy called GNO voting power,\ - \ which needs to reflect all the available options such as GNO deposits made through\ - \ Safe sponsored calls that allows locked GNO to be used for voting.\n- GIP-101\ - \ passed and requires weighted choice voting for the community to elect 10 delegate\ - \ candidates. However, weighted choice voting is not compatible with the Reality.eth\ - \ module used to power the GnosisDAO’s Snapshot space. The most viable solution\ - \ is to open an official Snapshot sub-space with weighted choice voting enabled.\ - \ In addition to updating the Snapshot subgraphs detailed above, the Gnosis Infrastructure\ - \ team will open a Snapshot sub-space to enable weighted choice voting should this\ - \ proposal pass quorum.\n\n# Introduction\nThe GnosisDAO's Snapshot space needs\ - \ to be monitored and maintained by the Gnosis Infrastructure team. Issues that\ - \ can arise are most often related to The Graph's subgraph indexer for Snapshot.\ - \ The Snapshot Subgraph is a powerful tool that efficiently organizes and indexes\ - \ on-chain governance events sourced from the Snapshot DAO client.\n\nThe recent\ - \ issues with the latest GIPs were related to the subgraphs indexer, which had stopped\ - \ working. The subgraphs are hosted by The Graph and will be deprecated To if they\ - \ are not updated.\n\nCommunity members also surfaced issues related to voting with\ - \ their staked GNO further indicating that there was a subgraph issue.\n\nhttps://forum.gnosis.io/t/bug-in-the-snapshot-voting-power-calculation/8395\n\ - \nGnosis DevOps initiated a review of all Snapshot configurations and found that\ - \ **the GnosisDAO's multisig owners would need to sign off on updating the settings\ - \ for the DAO's Snapshot.**\n\n# Proposed Changes\nThe subgraphs for GNO voting\ - \ power, which are currently running as best effort on Ethereum and Gnosis Chain,\ - \ will necessarily need to be re-deployed on The Graph Decentralized network. As\ - \ a result of the re-deploy process a new value for the SUBGRAPH_URL in the Snapshot\ - \ space configuration will be generated.\n\nThis value must be filled in the Snapshot\ - \ configuration. Any modifications to the GnosisDAO’s Snapshot settings must be\ - \ voted on by the DAO and executed via the DAO’s multi-sig.\n\n# Impact and Benefits\n\ - Updating the Snapshot configurations to install a new Graph API URL will improve\ - \ data availability for the GnosisDAO’s subgraphs being consumed by the Snapshot\ - \ Space. The Infrastructure team will also improve the current Snapshot strategy\ - \ called GNO voting power so that locked GNO from GIP-28 can participate in GnosisDAO\ - \ governance. \n\nhttps://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357\n\ - \n# Implementation Plan\nPlease provide a detailed plan for implementing the proposed\ - \ changes, including timelines, key milestones, and any necessary resources or support.\n\ - \nThe Gnosis Infrastructure team will be working on fixing the most impacting issues\ - \ with the subgraph, among which we have:\n\n1. Migration to the Decentralized Network\n\ - Objective: Transition the existing subgraph from the hosted service to the Decentralized\ - \ Network ahead of the service's deprecation to ensure continued functionality and\ - \ support by migrating to a more sustainable and decentralized service. **This is\ - \ a high priority and time sensitive task that needs to be carried out asap due\ - \ to TheGraph hosted service being deprecated definitely by September 14th 2024.**\n\ - \n2. Refresh of Voting Power Strategy\nObjective: Revise the voting power calculation\ - \ to align with current blockchain usage and protocol engagement. Accurately reflect\ - \ the active protocols and eliminate outdated or less utilized ones, enhancing the\ - \ relevance and fairness of voting power metrics. \n\nAdditionally, voting power\ - \ must account for:\n- Beacon chain withdrawals\n- Have the withdrawal address accruing\ - \ the voting power as opposed to the deposit address\n- osGNO\n- osGNO-GNO Balancer/Aura\ - \ pool\n\nThe Infrastructure team will remove support for:\n\n- 1Hive (Gnosis)\n\ - - Swapper (Gnosis)\n- SushiSwap (Gnosis)\n- Elk (Gnosis)\n- Baoswap (Gnosis)\n-\ - \ Symmetric (Gnosis)\n- Uni v3 (mainnet)\n- Balancer (mainnet)\n\n3. Fixes and Enhancements\ - \ in Voting Power Calculation\nObjective: Correct and refine the calculation issues\ - \ leading to inaccurate voting scores on some indexed protocols in order to keep\ - \ fairness of the voting process. Please see previous DAO votes covering the topic\ - \ of allowing locked GNO to vote on Snapshot for more info.\n\n- Withdrawal event\ - \ of the Gnosis Beacon Chain Deposit smart contract was not handled correctly resulting\ - \ in a wrong tracking of deposited GNO over the network. This issue is considered\ - \ as critical as it could lead to vote power farming. Currently it’s not trivial\ - \ to detect if a withdrawal is for claiming reward or for exit validator without\ - \ tracking the Execution Layer (that is not possible in the subgraph). We decided\ - \ to consider all withdrawals as an exit, even though this means we're not accounting\ - \ for rewards generated over time. While this isn't ideal, it's the best solution\ - \ we have at the moment to prevent abuse.\n\nOur technical team is actively working\ - \ on a better and more accurate solution, and we plan to update the system in the\ - \ coming weeks.\n\n- Fixing the issue with the Deposit event of the Gnosis Beacon\ - \ Chain Deposit smart contract incorrectly handled, which was causing some issues\ - \ with how voting power was being assigned. Specifically, the problem affected services\ - \ like Gelato Network, where the voting power was incorrectly being assigned to\ - \ the service itself rather than to the user.\n\nForum threads:\n- https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902\n\ - - https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357\n\ - - https://forum.gnosis.io/t/bug-in-the-snapshot-voting-power-calculation/8395\n\n\ - All the changes will be handled publicly on the following repository: https://github.com/gnosis/subgraph-voting-power\n\ - \nThe subgraphs will be owned by a Safe on Arbitrum (arb1:0x67cE12b820ea02f045e2507648608442C6527c6C)\ - \ having the Infrastructure team as owners. Subgraphs will be publicly available\ - \ on this page: https://thegraph.com/explorer/profile/0x67cE12b820ea02f045e2507648608442C6527c6C?view=Subgraphs&chain=arbitrum-one\n\ - \nAny updates regarding this GIP will be handled in a dedicated post in the Governance\ - \ section of the Gnosis Forum." -start: 1725276600 -end: 1725881400 -state: closed -author: '0x2408F8a0475D3823A1F4A4bfD86B2a4B80E6eDB6' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 127201.97099401394 -scores: - - 127197.83411998449 - - 0.000109650887329072 - - 4.136764378573427 -votes: 107 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-113.yml b/public/GIPs/GIP-113.yml deleted file mode 100644 index 4dc22481..00000000 --- a/public/GIPs/GIP-113.yml +++ /dev/null @@ -1,129 +0,0 @@ -id: gip-113-should-gnosis-dao-provide-grants-for-omen-2-0-initiative -gip_number: 113 -url: https://forum.gnosis.io/t/gip-113-should-gnosis-dao-provide-grants-for-omen-2-0-initiative -title: Should Gnosis DAO provide grants for Omen 2.0 initiative? -body: "## 2\\. Funding - Rewards/Reimbursements\n\n#### Category\n\nFunding - Rewards\ - \ and Reimbursement\n\n#### Executive Summary:\n\nThis proposal seeks a grant to\ - \ develop a frontend for the Omen prediction market, that leverages AI agents to\ - \ both create and predict market outcomes. The platform will offer users insights\ - \ into real-world event predictions while enhancing the overall user experience.\ - \ The requested grant of 400K WXDAI and 600 GNO will be used to fund the development\ - \ and maintenance of the Omen frontend.\n\n#### Specification\n\nThe proposed reward\ - \ and reimbursement program includes 400K WXDAI and 600 GNO for the development\ - \ and maintenance of the Omen 2.0 frontend, along with the transfer of the Omen.eth\ - \ ENS for branding and platform management. These funds will be allocated as follows:\ - \ 70% for product development, testing, and maintenance; 15% for marketing; 3% for\ - \ infrastructure; and 12% for project management. This program aims to drive user\ - \ growth on Gnosis Chain, augment the Gnosis AI team and its prediction market agents,\ - \ and support new initiatives and experiments across the broader Gnosis network.\n\ - \n##### Technical Specifications\n\nThe Presagio frontend is being developed on\ - \ React with Next.js, building upon the original OMEN conditional tokens contracts\ - \ written by Gnosis.\n\nKey integrations include Gnosis AI APIs, The Graph and Dune.\ - \ Gnosis AI API is used to fetch real-time market insights. We seek to use Gnosis\ - \ AI API for new functionalities (e.g. market creation, agent insights). Future\ - \ enhancements will involve building a back-end solution to improve data fetching\ - \ efficiency, improving users experience and new functionalities (e.g. database\ - \ to store data for user favorite markets for example).\n\nA comments section is\ - \ also planned, with an integration of a partner-provided solution (preferably in\ - \ web3 space), to allow user discussions within the platform.\n\n#### Rationale\n\ - \nThe past couple of months, there has been a great amount of traction in prediction\ - \ market area with Polymarket raising 70M in investment and there has been considerable\ - \ user growth in Polymarket, limitless.exchange and manifold.markets. At Dappcon,\ - \ there has been plenty of talks and discussions around AI, the kind of risks it\ - \ poses, the challenges it has and how AI and blockchain could become an unstoppable\ - \ force that needs to be kept a close watch. Gnosis has also been ahead of its time\ - \ in terms of all the products they launch and this vision aligns well with the\ - \ Gnosis AI and the investment they have made on AI agents.\n\nDuring Dappcon 2024,\ - \ we showcased the new UI we had started building for prediction markets and asked\ - \ for feedback from Martin. We explored a few possibilities around how we could\ - \ build a frontend for Omen, where we see the predictions that AI makes and the\ - \ research that it does when making a prediction. We will also be able to see how\ - \ each AI agent is performing, comparing them against each other.\n\n#### Budget\n\ - \nAs part of the proposal, we would also be looking forward to receive a grant of\ - \ 400K in WXDAI and 600 GNO (will be used as a validator for 1 year)\n\nThe funding\ - \ will be used for the following:\n\n * Development, testing and maintenance of\ - \ the product - 70%\n * Marketing - 15%\n * Infrastructure costs - 3%\n * Project\ - \ / Product management - 12%\n\n\n\nTransfer omen.eth ENS to a new multisig for\ - \ branding, frontend deployment and management. \nWe would also like to work closely\ - \ with the Gnosis AI team to understand and explore the possibility to make the\ - \ agents get better at creating markets and predicting them.\n\n**Milestones:**\n\ - \n## Milestones: Timeline, Implementations and Deliverable\n\n### Milestone 1 -\ - \ Support Omen 2.0 (Completed)\n\n**Deliverables:**\n\n * Base features: \n \ - \ * The dapp should be able to show all the binary markets and the spread for each\ - \ market.\n * In the markets page, any user should be able to buy and sell the\ - \ outcome tokens with the wallet connected.\n * Searching and filtering of markets.\n\ - \ * There should be a way to see the activity history and a graph depicting the\ - \ fluctuations in the outcome of a market.\n * Show markets that are based on\ - \ different collateral tokens.\n * Redemption of outcome tokens once the market\ - \ is resolved.\n * “My bets” page with a list of all the markets that the user\ - \ has predicted.\n\n\n\n**Time and Price Estimate:** We are completed with this\ - \ milestone and we worked on it for close to 4 months from March to June 2024. We\ - \ estimate 100K for this.\n\n### Milestone 2 - Support for AI agents\n\n**Deliverables:**\n\ - \n * A filter for all the markets created by the AI agents. (Completed)\n * Visualize\ - \ whether a particular transaction is created by one of the AI agents. (Completed)\n\ - \ * Display the resolution status and oracle, based on reality.eth oracle answering\ - \ process (Completed)\n * Connect with Gnosis AI APIs to show relevant articles\ - \ related to the market. (Completed)\n * Profile view (Completed)\n * Wallet Prediction\ - \ metrics (Completed)\n * Support for Devconflict (In Progress)\n\n\n\n**Time and\ - \ Price Estimate:** We estimate this will be done by Oct 2024 and we estimate 100K\ - \ for this.\n\n### Milestone 3 - Support for AI agents, more market types, redesign\n\ - \n**Deliverables:**\n\n * AI research - If the transaction is from an AI agent,\ - \ link the research article, the model used and the confidence rating that had been\ - \ used to arrive at the decision. This is done by integrating with Autonolas mechs\ - \ and Gnosis AI.\n * AI agents overview - Display AI agents performance across\ - \ various markets.\n * AI agents’ leaderboard - most success, most active, category\ - \ based info.\n * Expand to categorical markets.\n * Support for adding liquidity\n\ - \ * Support for market creation.\n * Redesign of the dapp\n * Featured markets\n\ - \ * Work on marketing towards building a brand for Omen in the socials.\n * Work\ - \ on documentation on how markets are created, bet on and resolved.\n\n\n\n**Time\ - \ and Price Estimate:** We estimate this will be done by Mar 2025 and we estimate\ - \ 120K for this.\n\n### Milestone 4 - More use cases\n\n**Deliverables:**\n\n *\ - \ Add support to have a comment section within each market.\n * Show Related markets\n\ - \ * Shareable market iframe\n * Watchlist\n * Add support for limit orders and\ - \ stop loss orders. This will need a lot of activity to wrap the ERC1155 to a ERC20,\ - \ update the liquidity management by the AI agent market creator to add liquidity\ - \ on Swapr V3 and then get help from solvers to tap into these pools for adding\ - \ support.\n\n\n\n**Time and Price Estimate:** We estimate this will be done by\ - \ June 2025 and we estimate 80K for this.\n\nAlso, we would like to be a bit elastic\ - \ in our milestones based on the inputs from users and community.\n\n## Evaluation\n\ - \n**Technical performance:**\n\n * Ensure that the frontend performs seamlessly\ - \ and smoothly without any severe issues.\n * Gnosis AI integration: Evaluate new\ - \ integration possibilities with Gnosis AI APIs for market insights, prediction\ - \ research and accuracy.\n\n\n\n**User engagement and experience:**\n\n * Grow\ - \ the amount of transactions using Omen by at least 500%. We will have a separate\ - \ dune dashboard for overall TVL, transactions and the volume.\n\n\n\n**Milestone\ - \ based progress:**\n\n * Successful shipping of features described in each of\ - \ the milestones.\n\n\n\n**Community involvement:**\n\n * Regular updates to the\ - \ community, GnosisDAO\n * New branding for Omen and reflect the new direction\ - \ and vision\n\n\n\n## Team/ Organization\n\nThe Presagio team comprises Leo, Diogo,\ - \ Rorry, Nicki, Akash, and Venky. As a cohesive unit, we have collaborated for over\ - \ a year to deliver notable projects such as Swapr’s CLAMM ()\ - \ on Gnosis chain and Stackly () deployed on Mainnet, Gnosis\ - \ chain and Arbitrum, all built atop CoW protocol infrastructure.\n\n## Conclusion\n\ - \nPresagio (Omen 2.0) represents a significant step in the evolution of prediction\ - \ markets, blending the AI infrastructure within the Gnosis ecosystem. The requested\ - \ funding will enable the development, maintenance and the growth of the platform\ - \ bringing Omen to a position of leading AI agent driven prediction market space.\n\ - \n6 Likes\n" -start: 1727334351 -end: null -state: - - phase-2 -author: '<Venky (@0xVenky) <venky@swaprhq.io>' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 400,000 - currency: WXDAI - confidence: High - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-114.yml b/public/GIPs/GIP-114.yml deleted file mode 100644 index dee808c9..00000000 --- a/public/GIPs/GIP-114.yml +++ /dev/null @@ -1,84 +0,0 @@ -id: '0x0e39baff8db3a93dccdbe404fd006d881dda318c4c2bf4772dbf61552d5d52b8' -gip_number: '114' -url: https://snapshot.org/#/gnosis.eth/proposal/0x0e39baff8db3a93dccdbe404fd006d881dda318c4c2bf4772dbf61552d5d52b8 -title: Should GnosisDAO support an annual renewal for Blockscout SLA and hosting services - - October 2024 - October 2025? -body: "### Executive Summary\nBlockscout continues to be an integral part of the Gnosis\ - \ ecosystem, providing critical blockchain explorer services for both the Gnosis\ - \ mainnet and Chiado testnet. The open-source explorer has not only attracted and\ - \ retained users but has also become an indispensable tool for Gnosis developers.\ - \ We propose to continue our partnership, offering enhanced services and cutting-edge\ - \ features to further elevate the Gnosis user experience.\n\n### Demonstrated Value\n\ - \nOver the previous year (since our last update in [GIP 89](https://forum.gnosis.io/t/gip-89-should-gnosisdao-support-an-annual-renewal-for-blockscout-sla-and-hosting-services/7269)),\ - \ Blockscout has delivered significant value and seen steady usage by the community.\ - \ The high-level numbers included here come from Mixpanel and directly from the\ - \ [Gnosis Blockscout instance](https://gnosis.blockscout.com/) covering stats from\ - \ September 1, 2023 through September 1, 2024 :\n\n Robust User Base:\n * Monthly\ - \ active users increased from 11.2K in September 2023 to 28.4K in August 2024. High\ - \ traffic months included December 2023 with 45,069 MAU and June 2024 with 41,113\ - \ MAU.\n * 115K average monthly page views over the previous year\n\nDeveloper\ - \ Support: \n* 42K verified contracts (all time)\n\nUser Engagement: \n* ~4.2K signups\ - \ to myAccount (since Oct 1, 2023)\n\n### Features and Improvements\n\nOver the\ - \ past year, we've implemented major features through standalone upgrades and significant\ - \ backend (V6+) and frontend improvements (v1.2+) including:\n\n* User Operations\ - \ Support - https://gnosis.blockscout.com/ops\n* Human-readable transactions\n*\ - \ Public tagging and tags submission\n* Name Service support\n* API and CSV export\ - \ improvements\n* SolidityScan security scores\n* DAppscout improvements including\ - \ star rating, DeFi menu and tooling, additional sorting features and more.\n\n\ - ### Roadmap for the upcoming year\n\n* Advanced filtering and sorting options\n\ - * Account Abstraction improvements\n* NFT explorer enhancements\n* Additional DeFi\ - \ integrations\n* Statistics and Analytics improvements (additional views, ability\ - \ to zoom)\n* Multichain search\n* User engagement and retention mechanisms\n\n\ - ### Bridged Transactions\n\nIn addition to the roadmap items above, we will create\ - \ a custom view for xDai bridge transactions providing similar functionality to\ - \ the current Bridged Deposit Transactions view in Gnosisscan (https://gnosisscan.io/txnbridge).\ - \ This view provides insights into xDai origination and allows for better tracking\ - \ and transparency.\n\n### Our Commitment\n\nGnosis is one of the original Blockscout\ - \ instances and will continue to receive priority updates, services and new features\ - \ as they are developed. Blockscout will continue to provide superior service for\ - \ the Gnosis ecosystem.\n\n1. Maintain and host Blockscout instances for Gnosis\ - \ Chain and Chiado testnet.\n2. Provide premium feature updates.\n3. Offer an SLA\ - \ that prioritizes maximum uptime, speed, and db optimizations.\n4. Deliver dedicated\ - \ support via Discord.\n\n### Timeline and Financial Proposition\n\nWe propose a\ - \ renewal of our 12-month engagement backdated to begin on 1 October 2024 and continuing\ - \ through 1 October 2025. Over the past year we have optimized our hosting operations\ - \ and on-premise infrastructure and are pleased to offer a 20% discount on our hosting\ - \ services for 2024-25.\n\n* Gnosis Chain Mainnet and archive node: $6,400/month\ - \ (was $8000 per month) for a total 12 month cost of $76,800\n* Chiado Testnet and\ - \ archive node: $3,200/month (was $4,000/month) for a total 12 month cost of $38,400\n\ - \n**Total Investment:** $115,200\n\n*This represents a $28,800 per year reduction\ - \ from our 2023 pricing, reflecting our commitment to value and support for the\ - \ Gnosis ecosystem.*\n\nAmount is requested up front for the year. Payment can be\ - \ made to Blockscout’s SAFE 0xAddress on Ethereum mainnet (0x242ba6d68FfEb4a098B591B32d370F973FF882B7)\ - \ with USDC or USDT.\n\n### Ongoing Support & Continued Growth\n\nBlockscout has\ - \ a proven track record of providing high-quality, reliable and affordable explorer\ - \ services. We’ve worked hard over the past year to optimize our offerings and close\ - \ the gap between features provided by closed source explorers and our open-source\ - \ explorer. We’ve provided resilience and redundancy over the past year during numerous\ - \ Gnosisscan outages. Above and beyond our parity with other scanners, we are dedicated\ - \ to developing new and innovative features to support Gnosis as a standalone ecosystem\ - \ as well as its role in the multichain future.\n\nBy renewing our partnership,\ - \ you're not just getting a blockchain explorer – you're investing in the continued\ - \ growth and success of the Gnosis ecosystem. Let's continue building the future\ - \ of blockchain exploration together!" -start: 1729610650 -end: 1730215450 -state: closed -author: '0xd145860c3cAD12AeEc9D8021d36B48d7fAd09454' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 79416.20316660054 -scores: - - 79416.17774196692 - - 0.000333137928169376 - - 0.02509149568266771 -votes: 82 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-115.yml b/public/GIPs/GIP-115.yml deleted file mode 100644 index d93917b5..00000000 --- a/public/GIPs/GIP-115.yml +++ /dev/null @@ -1,124 +0,0 @@ -id: '0x963a5dceb6f7758cc06ba2ee74d7f17b5da6cce8907b54b39f7df64322e9c373' -gip_number: '115' -url: https://snapshot.org/#/gnosis.eth/proposal/0x963a5dceb6f7758cc06ba2ee74d7f17b5da6cce8907b54b39f7df64322e9c373 -title: Safe{Boost} on Gnosis Chain -body: '## Executive Summary - - Safe{Boost} is a 6-month rewards program to expand Safe activity and users on Gnosis - Chain where users earn points when performing certain activities. A total of 250k - SAFE tokens will be distributed as part of the program, based on the points accrued. - - - **As the Joint Treasury will fund the program, no additional funding is required - for this initiative.** - - - If the proposal receives support from both Gnosis DAO and Safe DAO, karpatkey will - operationalise the program described below on behalf of the JT. - - - ## Rationale - - As the treasury manager for the Safe DAO <> Gnosis DAO joint treasury (JT), karpatkey - is responsible for allocating funds to initiatives to expand the Safe and Gnosis - ecosystems. Within that scope, we propose launching a rewards program on Gnosis - Chain, mirroring the activity included in the current [Safe{Pass}](https://safe.global/pass) - program on Ethereum Mainnet. The goal is to boost Safe user onchain interactions - on the Gnosis Chain and grow the number of SAFE token holders on the Gnosis Chain. - - - This campaign will also serve as valuable experience in assessing the impact of - incentives on the overall Safe activity in Gnosis Chain. Insights gained will help - refine future initiatives, allowing for continuous improvement and increased efficiency - based on real data. - - - Out of the more than [280,000 Safe accounts created in Gnosis Chain](https://dune.com/karpatkey/safe-gno) - since the beginning of 2024 to the end of Q3: - - - Around 10,000 Safes have had at least one week with more than 1 USD in TVL - - - Around 18,000 Safes have made at least one transaction - - - Around 6,000 Safes have transferred at least 1 USD in value - - - ## Specification - - Safe{Boost} is a 6-month rewards program to expand Safe activity and users on Gnosis - Chain. Users who perform the activities listed under the behavior section in Gnosis - Chain (subject to eligibility terms) will earn points. Points will be updated weekly - and made public in a Dune Analytics dashboard. - - - The program will be administered by karpatkey, the manager of the JT, who will be - responsible for tracking, determining, distributing the rewards, and reporting the - results. - - - #### Eligible Activities - - Safe users who conduct the following actions in Gnosis Chain will be rewarded with - points: - - - **Transaction count:** The number of transactions made with your Safe Account. - - **Transaction volume:** Volume of the transactions made with your Safe Account (accounts - with at least 1 USD in volume are eligible for points). - - **Assets stored:** The total value of assets stored in your Safe Account (accounts - with at least 1 USD in TVL are eligible for points). - - **Regular user:** Make at least one weekly transaction with your Safe Account. - - Specific actions related to program partners will also earn additional points. Each - activity related to a program partner will be specific, have separate rewards, and - might also qualify for points. karpatkey will reach out to protocols on the Gnosis - Chain that are relevant to the ecosystem and also present a synergistic opportunity - to onboard them to the program. - - - #### Duration - - The program will last for six months. Pending DAO approval, it is expected to start - on January 10th, 2025, and finish on July 9th, 2025. - - - ## Budget - - Once the program ends, a total of 250k SAFE tokens will be distributed based on - the points accrued throughout the duration. These SAFE rewards will be distributed - by a stream funded from the JT on Gnosis Chain (or a specifically designated Safe - with the JT wallet on Gnosis Chain as an owner) to all eligible Safes, with a stream - duration of 3 months. - - - As the Joint Treasury will fund the program, no additional funding is required for - this initiative. - - - ## Terms of Participation - - Terms of Participation are drafted in this [document](https://drive.google.com/file/d/174HcN4b0mbSYVCIYGgVhiVxyo-a0J6mQ/view?usp=sharing)' -start: 1730827696 -end: 1731432496 -state: active -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: pending -scores_total: 81205.29454144526 -scores: - - 80938.29454144459 - - 0 - - 267.0000000006686 -votes: 60 -quorum: 75000 -funding: - amount: 250,000 - currency: SAFE - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-12.yml b/public/GIPs/GIP-12.yml deleted file mode 100644 index 8fbe9021..00000000 --- a/public/GIPs/GIP-12.yml +++ /dev/null @@ -1,46 +0,0 @@ -id: gip-12-treasury-swaps-program-1-gno-x-bal -gip_number: 12 -url: https://forum.gnosis.io/t/gip-12-treasury-swaps-program-1-gno-x-bal -title: 'Treasury Swaps Program #1 GNO x BAL' -body: "## Simple Summary\n\nCreate periodic OTC trades GNO X BAL between GnosisDAO\ - \ and Balancer’s treasuries. The program #1 will consist of 4000 ETH-equivalent\ - \ GNO (BAL) distributed across 8 months.\n\n## Motivation\n\nIn April 2021, [Gnosis\ - \ and Balancer launched a partnership integration](https://blog.gnosis.pm/introducing-gnosis-protocol-v2-and-balancer-gnosis-protocol-f693b2938ae4),\ - \ the Balancer-Gnosis-Protocol (BGP). This proposal looks forward to strengthening\ - \ the partnership and aligning the DAOs financially.\n\nHow? \n-Financial incentives\ - \ alignment: It will promote the Balancer-Gnosis-Protocol outcome in the best interest\ - \ of both Gnosis and Balancer\n\n * Treasury diversification\n * Improved token\ - \ distribution within long term players\n * Voting power for DAO proposals\n\n\n\ - \n## Specification\n\nStart a pilot program #1 of 4000 ETH-equivalent GNO (BAL)\ - \ distributed across 8 months. After the program #1, make a lookback, evaluate the\ - \ results and define next steps.\n\nEvery first Monday of the month Gnosis (Balancer)\ - \ sends 500 ETH-equivalent GNO (BAL) to Balancer (Gnosis) treasury wallet.\n\nThe\ - \ price will be defined by the last 30 days of open-price historical data average\ - \ on Coingecko: \nGNO: [https://www.coingecko.com/en/coins/gnosis/historical_data/eth\ - \ ](https://www.coingecko.com/en/coins/gnosis/historical_data/eth) \nBAL: [Balancer\ - \ Price: BAL Live Price Chart & News | CoinGecko](https://www.coingecko.com/en/coins/balancer/historical_data/eth)\n\ - \n[Link to discussion on Balancer forum](https://forum.balancer.fi/t/rfc-treasury-swaps-program-gno-x-bal/2110)\n\ - \n[Link to phase1 post](https://forum.gnosis.io/t/treasury-swaps-program-gno-x-bal/1440)\n\ - \n2 Likes\n" -start: 1630933834 -end: null -state: - - phase-2 -author: '@claberus' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: '4000' - currency: ETH-equivalent - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-13.yml b/public/GIPs/GIP-13.yml deleted file mode 100644 index 584aa857..00000000 --- a/public/GIPs/GIP-13.yml +++ /dev/null @@ -1,120 +0,0 @@ -id: '0x9b12a093e17e92b56d070ed876883d8c2331678ca3945e44f66dd416cfd47a64' -gip_number: '13' -url: https://snapshot.org/#/gnosis.eth/proposal/0x9b12a093e17e92b56d070ed876883d8c2331678ca3945e44f66dd416cfd47a64 -title: 'Should Gnosis DAO proceed and deploy CowDAO and vCOW token? ' -body: 'The proposal is available [here](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735/1). - It is recommended to read it in the forum where proper formatting is available.  - - - The proposed deployment code for this proposal is available [here](https://github.com/gnosis/cow-token/) - and an audit is available [here](https://github.com/gnosis/cow-token/blob/main/audits/2021-12_G0-group.pdf). - - - # What is CowDAO envisioned to be?  - - - CowDAO is an open organization of developers, traders, market makers and many more - community members aligned with its vision. CowDAO is focused on fair and decentralized - trading systems - in particular, building, maintaining and advancing the Cow Protocol. - Cow Protocol technology powers a network of traders and solvers, enabling trustless - and efficient peer-to-peer trading. Leveraging batch auctions as a key concept uniquely - positions Cow Protocol as native trading infrastructure for discrete-time settlement - layers like Ethereum and enables fair and accessible trading to its users. - - - # Vision - - - We foresee a future where increasingly all kinds of assets will be tokenized on - Ethereum and other decentralized blockchains, where everyone - individuals and collectives - - can have full custody of their tokenized assets. CowDAO''s vision is a decentralized - future where digital assets can be traded in a fair, efficient and reliable manner - among people and communities around the world. Our mission is to build a protocol - that becomes the most user friendly and price effective way to exchange digital - assets, enabling all users to trade securely and know their trades are protected. - - - We are determined to make Cow Protocol the foundational liquidity hub for trading - digital assets by applying continuous innovation, cultivating intellectual bravery - and by expanding the CoW Protocol ecosystem - inviting the brightest minds to join - the community. - - - # Values and Principles - - - This section should not limit the scope of what CowDAO can pursue or achieve. The - community should keep iterating on its values and principles to best reflect each - and every member individually and the DAO as a whole. - - - Below are work in progress principles that we propose should guide the way we behave - as a community and help shape the decision process for CowDAO. - - - # Universal Simplicity - - - The goal of Cowswap is to allow easy access to the decentralized economy across - all levels of experience, the Cowswap community will focus on simplicity and high - quality user experience across DeFi and Web3. - - - # Decentralization and Access to everybody - - - Cow Protocol is permissionless for anyone to access with no discrimination. The - Cowswap community will reward alternative UIs and gateways to the protocol in order - to ensure easy worldwide access and usability in accordance with applicable laws. - - - # Open Collaboration - - - CowSwap should be a core part of Ethereum and Web3, we believe this can be achieved - by openly collaborating with other teams, protocols and communities in the decentralized - ecosystem. Education, information sharing and aligned partnerships are key drivers - to build out the CowSwap ecosystem. - - - # Proposed Governance Parameters for CowDAO Launch  - - - - CowDAO proposals will be discussed on CowDAO''s dedicated Forum, consisting - of two phases: forum discussion and snapshot voting. - - - - Final approval of proposals will be made through vCOW token voting on the cow.eth - snapshot space that will be deployed upon GIP-13 successfully passing. - - - - A maximum amount of 560M vCOW tokens will become available, out of which it  - is estimated that up to 350m vCOW tokens might  be used  for voting initially. A - quorum is proposed that would require roughly 10%  of this supply for approving - CowDAO Improvement Proposals (CIP). This is defined by a set limit of  35m COW tokens - required to vote YES in order for a proposal to pass. - - - - Additionally, in order for a proposal to be approved, YES votes should account - for >50% of total participating votes. (simple majority)' -start: 1643387400 -end: 1643992200 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 138550.10534506236 -scores: - - 138540.8447214393 - - 9.25333281416444 - - 0.007290808895256196 -votes: 545 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-14.yml b/public/GIPs/GIP-14.yml deleted file mode 100644 index 07f87257..00000000 --- a/public/GIPs/GIP-14.yml +++ /dev/null @@ -1,120 +0,0 @@ -id: gip-14-gnosis-vault-on-hats-finance -gip_number: 14 -url: https://forum.gnosis.io/t/gip-14-gnosis-vault-on-hats-finance -title: Gnosis vault on Hats.finance -body: "## Simple Summary\n\nFollowing the previous forum post, a proposal is to create\ - \ a Gnosis security vault on Hats.finance. Security Vaults on Hats incentivizes\ - \ hackers, auditors, and the community to protect the projects and protocols contracts\ - \ by promoting responsible disclosure.\n\n * A committee composed of Gnosis dev\ - \ leadership & security auditors is assigned as reviewers for security disclosures.\n\ - \n * A Gnosis vault is initialized on Hats.finance protocol, with defined severities,\ - \ covered smart contracts list.\n\n * Community members, Gnosis Treasury, and the\ - \ broad ecosystem are incentivized to deposit GNO into the vault.\n\n * The goal\ - \ of the vault is to incentivize responsible disclosure in the case of a detected\ - \ hack or exploit.\n\n * The dApp is live **app.hats.finance**\n\n\n\n\n## Abstract\n\ - \nHats.finance is a proactive bounty protocol for white hat hackers and auditors,\ - \ where projects, community members, and stakeholders incentivize protocol security\ - \ and responsible disclosure.\n\nHats create scalable vaults using the project’s\ - \ own token. The value of the bounty increases with the success of the token and\ - \ project. In addition, NFT artists will create numerous unique NFTs specially minted\ - \ for hackers and auditors that will responsibly disclose vulnerabilities.\n\nWe\ - \ offer every participant in the Ethereum ecosystem skin in the game to ensure a\ - \ more secure future for the users of #Ethereum and smart contracts in general.\n\ - \n## Motivation\n\nGnosis project:\n\n * 24/7 audit on your protocol with a proactive\ - \ approach that incentivizes the hacker to disclose the vulnerability instead of\ - \ exploiting it.\n\n * A disclosed vulnerability means no TVL/ TOKEN and, most\ - \ of all, no reputation loss.\n\n * PR of disclosure and fix becomes a strength\ - \ to the project and its development team.\n\n * Attract more users to the “strong\ - \ and secure protocol.”\n\n * Permissionless vault - token holders and the gnosis\ - \ community can deposit or withdraw in the same permissionless nature.\n\n\n\n\n\ - GNO value:\n\n * GNO staked in Hats vault increases Gnosis security guarantees\n\ - \n * Staking GNO in the hat vaults reduces circulating token supply\n\n * One-sided\ - \ yield farming based on your GNO\n\n * Participating in Hats pull at this initial\ - \ phase will be rewarded with extra allocation points(Extra token incentive for\ - \ the first 20 projects to join). This way, the gnosis community will have extra\ - \ voting power in what could become a significant security layer of the ecosystem.\n\ - \n\n\n\nGnosis community / GNO holders:\n\n * Join the effort to secure the ecosystem.\n\ - \n * Financial incentive in the form of Yield farming (Protocol protection mining)\n\ - \n * Protect their own project token by sacrificing a portion of their token to\ - \ make their holding more secure. By doing that, get $HAT and become influential\ - \ in the Hats governance process.\n\n\n\n\n## Specification\n\nThe hats protocol\ - \ is permissionless, meaning anyone can participate and lock GNO in the Hats GNO\ - \ vault. The GNO vault protects the Gnosis protocol from hacks by incentivizing\ - \ responsible disclosure through the Hats protocol.\n\nIf a hacker responsibly discloses\ - \ an exploit through the Hats mechanism, a portion (depending on severity) of the\ - \ locked GNO tokens will go to the hacker as a reward, some vested, and some immediately.\n\ - \nThis is a win-win situation for Hackers, the Gnosis community, and the core team.\n\ - \nAs a GNO holder: Statistically when a protocol suffers a hack or exploit its token\ - \ value will drop between 35-50% at the 24 hours following the hack (Messari). It\ - \ is rational to lock part of a user’s holdings to protect the rest of his holdings\ - \ from a potential hack.\n\nHacker gets a substantial amount of _FUNGIBLE_ money,\ - \ become famous for disclosing a critical vulnerability instead of rekt’ing the\ - \ protocol and its stakeholders, and receive funds without becoming a worldwide\ - \ criminal.\n\nWe found out that a crucial element that can help black hat hackers\ - \ to participate in protocol protection is privacy and permissionless.\n\nThe decentralization\ - \ of the protocol is critical in order to incentivize anyone involved in the protocols\ - \ to protect it: community, artist, investors, team members, & developers.\n\n##\ - \ Rationale\n\nSecurity underlies the technology of smart contracts, there isn’t\ - \ such a thing as too much security. We think Ethereum dapps should include both\ - \ our solution and others. The beauty of Hats being a fully permissionless protocol\ - \ is that DAOs, treasuries, and individuals can deposit or withdraw funds from the\ - \ vault at any point. Utilize Idle funds for active protection with full depositor\ - \ control for treasuries and users alike.\n\nThe Hats contracts are [public](https://github.com/hats-finance/hats-contracts)\ - \ verified on Etherscan and can be found by clicking the “View Contracts Covered”\ - \ under Hats vault in app.hats.finance and we are ready to onboard Gnosis GNO.\n\ - \nAudit and safety measures:\n\n[Audit reports](https://github.com/hats-finance/hats-contracts/tree/develop/audit)\n\ - \nHats is live with Hats vault containing $100K USDC worth of token to incentivize\ - \ responsible disclosure.\n\nVault funding: **Not part of this GIP**\n\nThe amount\ - \ of Funding the Gnosis vault on hats, by $GNO holders and Gnosis DAO is 100% controlled\ - \ by you. As a community, you can choose together how important it is for you to\ - \ incentivize others to make Gnosis a much safer environment. Bear in mind that\ - \ funds will be released from the vault only due to vulnerability disclosure. The\ - \ upside from fixing issues is drastically more valuable than the financial face\ - \ value of the GNO tokens that are going to be deposited.\n\n## Implementation\n\ - \n * The hats team will create the committee set up JSON file with all the open-source\ - \ details we collected online.\n * Gnosis team for confirmation.\n * When this\ - \ stage is completed, the vault will be displayed in hats dApp.\n\n\n\n## Gnosis\ - \ Impact\n\n_Phase 2 Proposals: Please ignore this section, and leave as is. It\ - \ is used for Phase 3 proposals. \nPhase 3 Proposals: Replace the `question` in\ - \ the below iframe with the relevant `questionID` for this GIP, then delete this\ - \ paragraph. If Omen Prediction Markets have not been created for this GIP yet,\ - \ or if you have any questions about retrieving the questionID, please get in touch\ - \ with a forum moderator._\n\n## GnosisDAO Snapshot\n\n_Phase 2 Proposals: Please\ - \ ignore this section, and leave as is. It is used for Phase 3 proposals. \nPhase\ - \ 3 Proposals: Add a link to the corresponding GnosisDAO Snapshot poll you’ve created._\n\ - \n6 Likes\n" -start: 1632445026 -end: null -state: - - phase-2 -author: 'Ofir Perez <sombrero@hats.finance> - - status: Phase 2 - - type: Meta - - created: 2021-9-23 - - - - - Simple Summary - - Following the previous for…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-15.yml b/public/GIPs/GIP-15.yml deleted file mode 100644 index 1aa66d25..00000000 --- a/public/GIPs/GIP-15.yml +++ /dev/null @@ -1,81 +0,0 @@ -id: '0x38b7f446554911d6e0dc261b4ad4bca2ea41b83be47b1c97ce274df811ce14cd' -gip_number: '15' -url: https://snapshot.org/#/gnosis.eth/proposal/0x38b7f446554911d6e0dc261b4ad4bca2ea41b83be47b1c97ce274df811ce14cd -title: Governauts Rewards Systems Research Initiative -body: "```\nGIP: 15\ntitle: Governauts Rewards Systems Research Initiative\nauthor:\ - \ Angela Kreitenweis (angela@tokenengineering.net) (@akrtws (TE Academy)#4246)\n\ - status: Phase 3\ntype: Funding\ncreated: 2021-9-26\n\n```\n\nSimple Summary\n--------------\n\ - \nThe Reward Systems Token Engineering Initiative will run an #OpenScience program\ - \ on the topic of DAO Rewards Systems. We'll offer education and collaborative research\ - \ for Token Engineers specializing in Governance, the aim is to come up with Zodiac\ - \ DAO Improvement proposals.\n\nAbstract\n--------\n\nIn November 2021, we'll kick-off\ - \ a community research initiative on Rewards Systems and bring together 20-30 researchers\ - \ from various backgrounds to work on Rewards Systems for DAOs. The work will be\ - \ based on real DAO cases. We'll offer an extensive educational program and facilitate\ - \ the research process to create maximum output.\\\nThis is an excellent opportunity\ - \ for Gnosis Zodiac to create attention, and work collectively on Zodiac DAO Improvement\ - \ Proposals.\n\nMotivation\n----------\n\nRewards Systems are a vital element for\ - \ DAOs to compensate builders for contributions and grant decision-making power\ - \ and co-ownership to those who are so critical for a DAO's value. Ecosystem Development\ - \ via proposals and grants has become a popular method to distribute funds, and\ - \ establish a shared perspective on value-add. All Rewards Systems need reliable\ - \ value assignment, to ultimately lead to a healthy reward distribution.\n\nThe\ - \ Governauts Rewards System Research initiative will explore:\n\n- How to best\ - \ track contributions and account for the richness of value adds that come in many\ - \ forms: code, communication, care, creativity\n- how to assign value, how to\ - \ define value and associated roles, and permissions\n- what do stakeholders expect\ - \ from rewards, and does the system in place meet these requirements\n- what are\ - \ metrics to measure the reward system healthiness - in its respective lifecycle\n\ - \nSpecification\n-------------\n\nWe'll provide education:\n\n- case introductions:\n\ - - DAO cases with a Rewards System in production (TE Commons, Ocean DAO, NearDAO\ - \ etc.)\n- partner talks, incl. Zodiac\n- Token Engineering fundamentals\n-\ - \ DAO case studies and insights from Gitcoin, CommonsStack, BlockScience, TE Commons,\ - \ and more\n- multidisciplinary insights from game design, behavioral economics,\ - \ currency design, and monetary theory\n\nand mentoring:\n\n- define an own research\ - \ question in the scope of Rewards Systems\n- use methods from the Token Engineering\ - \ toolkit\n- form multidisciplinary teams\n- produce actual outcome\n\nThis\ - \ program is open to anyone, and free.\\\nWe'll have an application process to ensure\ - \ that participants\n\n- have the right background, e.g., Political Science, Behavioral\ - \ Economics, Mechanism Design or Data Analytics\n- commit the next three months\ - \ to work on Rewards System Research questions\n- attend an education program,\ - \ learn and work on a self-defined research question\n\nRationale\n---------\n\n\ - This program is organized by TE Academy. The mission of TE Academy is to develop\ - \ the Token Engineering discipline and grow the number of skilled Token Engineers\ - \ in crypto. TE Academy has run research initiatives like this several times already:\n\ - \n- [Gitcoin Grants Quadratic Funding 2](https://gitcoin.co/blog/token-engineering-open-science-program-a-multidisciplinary-study-of-gitcoin-grants/)\n\ - - [Balancer Simulations](https://youtu.be/q0dmFNPDBuw)\n- [OMNIPool Engineering\ - \ and Simulations](https://youtube.com/playlist?list=PL-GxJch-YeZfjcwjCwwNSRGjnSBdapOtA)\n\ - - About [TE Academy Research Groups 1](https://youtu.be/_qNnVgIAmro)\n\nIncubating\ - \ Governauts is an initiative to establish a dedicated branch in Token Engineering\ - \ focused on decentralization and governance.\\\nWe organize workshops and discussions,\ - \ provide a platform for collaboration and bring research programs to life with\ - \ TE Academy.\n\nImplementation\n--------------\n\nWe'll deliver in three steps:\n\ - \n- Zodiac workshop:\\\n with researchers, partners and DAO stakeholders as\ - \ a roundtable to create awareness and set the scope for Zodiac DAO Improvement\ - \ Proposals\n- Research documentation:\\\n community researchers work on Rewards\ - \ Systems and\n - document their results in public HackMDs/Github repos and\n\ - \ - discuss progress in weekly sessions (all sessions are recorded and shared\ - \ publicly!)\n - share their results in a final presentations event (public)\n\ - - Handover to Zodiac bounty/grant program\\\n to further develop most interesting\ - \ results in DAO Improvement proposals\n" -start: 1636650000 -end: 1637168400 -state: closed -author: '0x3b067Af83F540cB827825a6Ee5480441a4237E77' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 65641.1028885959 -scores: - - 65640.89288859589 - - 0.21 - - 0 -votes: 186 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-16.yml b/public/GIPs/GIP-16.yml deleted file mode 100644 index 74e483b4..00000000 --- a/public/GIPs/GIP-16.yml +++ /dev/null @@ -1,42 +0,0 @@ -id: '0x8f8d2118ef3a8fa9f8b1814ce2ae34ae8776548716a45ce69082f3e266465f48' -gip_number: '16' -url: https://snapshot.org/#/gnosis.eth/proposal/0x8f8d2118ef3a8fa9f8b1814ce2ae34ae8776548716a45ce69082f3e266465f48 -title: GIP-16 Gnosis Chain -body: 'Should GnosisDAO implement GIP-16, as detailed in this [forum post]() (also - available on [IPFS](https://gateway.pinata.cloud/ipfs/Qmd83zavdSrUDNZEsSdixt7aRoBeEo6pVHSwZhMmyKygjX))? - - - There are four transactions attached to this proposal: - - 1. Withdraw 285,398 GNO from the vesting contract - - 2. Wrap 20,000 ETH to WETH - - 3. Approve 20,000 WETH to the Gnosis Auction contract - - 4. Initiate an Auction on Gnosis Auction - - - Please see the [transaction simulation](https://dashboard.tenderly.co/giacomolicari/xdaignomergetest/simulator/4ba7a377-c418-44a6-a70c-9ce7d984c765) - for the expected result.' -start: 1638291600 -end: 1638896400 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 98984.43493373533 -scores: - - 96601.99358039466 - - 2382.441353340679 - - 0 -votes: 264 -quorum: 0 -funding: - amount: 285,398 - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-17.yml b/public/GIPs/GIP-17.yml deleted file mode 100644 index 38e404e0..00000000 --- a/public/GIPs/GIP-17.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0x06feee3d2c9bc68ae0fccc8f2ada05c8323f0a71d2bcdfbc5556e8336cf5d71f' -gip_number: '17' -url: https://snapshot.org/#/gnosis.eth/proposal/0x06feee3d2c9bc68ae0fccc8f2ada05c8323f0a71d2bcdfbc5556e8336cf5d71f -title: GIP-17 Gnosis DAO Safe update AND new treasury management Safe -body: "Should Gnosis DAO upgrade the Gnosis DAO Safe AND create a separate Safe for\ - \ Active Treasury Management as detailed in [this forum post](https://forum.gnosis.io/t/gip-17-should-gnosis-dao-upgrade-the-gnosis-dao-safe-and-create-a-separate-safe-for-active-treasury-management/2237)?\ - \ \n\nTransaction batch 1 upgrades the Gnosis DAO Safe and creates the new daughter\ - \ Safe.\nTransaction batch 2 sends the tokens to the daughter Safe." -start: 1639515600 -end: 1640124000 -state: closed -author: '0xf19d3e30392359440597ffE1d783ab77aebb2b4D' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 119028.46543965576 -scores: - - 119028.46543965576 - - 0 - - 0 -votes: 140 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-18.yml b/public/GIPs/GIP-18.yml deleted file mode 100644 index faafa9b1..00000000 --- a/public/GIPs/GIP-18.yml +++ /dev/null @@ -1,38 +0,0 @@ -id: '0x23d8ac4c853b6b9d9e7972ae64fb94637f141a9e11bdafb0f24c528f43dea27b' -gip_number: '18' -url: https://snapshot.org/#/gnosis.eth/proposal/0x23d8ac4c853b6b9d9e7972ae64fb94637f141a9e11bdafb0f24c528f43dea27b -title: TickDAO Investment -body: 'Should GnosisDAO implement GIP-18, investing 120.7085 WETH in exchange for - 12,500,000 TICK, as detailed in this forum post? - - - https://forum.gnosis.io/t/gip-18-should-gnosisdao-invest-at-tickdao/2262/6 - - - There are one transaction attached to this proposal: - - - Transfer 120.7085 WETH to tickdao.eth - - ' -start: 1640358000 -end: 1640962800 -state: closed -author: '0xef364e390fF3f326e3153d0B9c4B944dB42155e5' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 85151.52459133675 -scores: - - 85134.96447914814 - - 16.56011218860319 - - 0 -votes: 180 -quorum: 0 -funding: - amount: '120.7085' - currency: WETH - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-19.yml b/public/GIPs/GIP-19.yml deleted file mode 100644 index 32b3d697..00000000 --- a/public/GIPs/GIP-19.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0x34c8c299df663957c4ccde826cf56cc798c2590f62ec2e400d635ffae506d901' -gip_number: '19' -url: https://snapshot.org/#/gnosis.eth/proposal/0x34c8c299df663957c4ccde826cf56cc798c2590f62ec2e400d635ffae506d901 -title: Should Gnosis DAO burn 715k GNO? -body: 'Should GnosisDAO burn 715k GNO as detailed in this forum post? - - - https://forum.gnosis.io/t/gip-19-should-gnosis-dao-burn-715k-gno/2312' -start: 1644944400 -end: 1645549200 -state: closed -author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 687.7040123613141 -scores: - - 674.2140123613141 - - 13.49 - - 0 -votes: 70 -quorum: 0 -funding: - amount: 715,000 - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-2.yml b/public/GIPs/GIP-2.yml deleted file mode 100644 index e6c339c8..00000000 --- a/public/GIPs/GIP-2.yml +++ /dev/null @@ -1,127 +0,0 @@ -id: gip-2-safe-token-model -gip_number: 2 -url: https://forum.gnosis.io/t/gip-2-safe-token-model -title: SAFE Token Model -body: "## Motivation\n\nThough we are building Gnosis Safe as an open system that\ - \ can be re-used and extended by anyone, we recognize that Gnosis still holds a\ - \ dominant position in the Safe ecosystem. The main reason for this is that Gnosis\ - \ currently holds the “trust monopoly” for the curation and promotion of all core\ - \ components of Gnosis Safe. Here are a few examples:\n\n * **Interfaces:** Gnosis\ - \ hosts the interfaces most commonly used to interact with Gnosis Safes.\n * **Smart\ - \ contracts:** Gnosis is the main contributor and publisher of smart contract updates.\n\ - \ * **Safe Apps:** Gnosis curates the list of Safe Apps displayed to the users\ - \ through our interfaces.\n\n\n\n## SAFE Token\n\nIn order to enshrine Gnosis Safe\ - \ as an end-to-end community project, we are proposing to launch the SAFE governance\ - \ token. We consider the SAFE Token as an essential tool to decentralize the trust\ - \ monopoly held by Gnosis. We believe this will firmly establish Gnosis Safe as\ - \ a public good and community-owned infrastructure. SAFE Tokens are not an investment\ - \ product. Instead, SAFE Token will be distributed to stakeholders of the Gnosis\ - \ Safe ecosystem that are interested in shaping the future of Gnosis Safe.\n\n[![Screenshot\ - \ 2020-11-20 at 10.25.36](https://forum.gnosis.io/uploads/default/optimized/1X/f0342808e1849f58ef03c13aca61fd8b008638eb_2_690x385.png)Screenshot\ - \ 2020-11-20 at 10.25.361118×624 409 KB](https://forum.gnosis.io/uploads/default/original/1X/f0342808e1849f58ef03c13aca61fd8b008638eb.png\ - \ \"Screenshot 2020-11-20 at 10.25.36\")\n\n## SAFE Governance\n\nWe envision the\ - \ SAFE Token will be used to govern and curate essential infrastructure components\ - \ of the Gnosis Safe ecosystem, including:\n\n* * *\n\n#### Assets\n\n * **SAFE\ - \ Treasury:** SAFE holders will be able to reward important ecosystem developments\ - \ via the SAFE Treasury.\n * **ENS domain “safe.eth”:** The ENS domain “safe.eth”\ - \ will be used in the future to point to a Safe Multisig interface deployed on IPFS,\ - \ but it might be used for other purposes as well.\n\n\n\n#### Curation\n\n * **Safe\ - \ Apps:** SAFE Token holders will curate the list of trusted Safe Apps that appear\ - \ by default in the Gnosis Safe web interface and update existing ones to newer\ - \ versions.\n * **Safe Contracts:** After successful audits and bug bounty periods,\ - \ the community should be vetting updates to the Safe Contracts and define which\ - \ is the recommended contract version at any point in time.\n * **Safe Modules:**\ - \ Gnosis Safe smart contracts can be extended with modules to enable custom access/control\ - \ schemes. SAFE holders will be able to curate and validate community-built Safe\ - \ Modules.\n\n\n\n#### Signaling\n\n * **Safe Apps:** Show interest in a specific\ - \ Safe App idea to educate developers about user preference and demand.\n\n * **Infrastructure:**\ - \ Help prioritize tasks in Safe-related Github repositories ([see example](https://tokenlog.xyz/gnosis/safe-react)).\n\ - \n\n\n\n* * *\n\nThere is no immediate need to have all activities described above\ - \ to be community-governed from day one. Rather, Gnosis will take a cautious and\ - \ progressive approach, decentralizing governance over different components successively\ - \ over time to prevent any disruptions to users. The governance process would likely\ - \ be conducted using a SAFE Treasury app that allows SAFE holders to vote on proposals.\ - \ **The transition to open governance is a long term goal, and we aim to establish\ - \ a sustainable governance system that lasts for decades.**\n\nGnosis Safe will\ - \ always remain a fully self-custodial asset management solution, in which the user\ - \ is in full control. The governance enabled through the SAFE Token is limited to\ - \ curation activities and building initiatives that drive the Gnosis Safe ecosystem\ - \ forward.\n\n## SAFE Token Distribution\n\n> Though the proposal is about whether\ - \ a Gnosis SAFE token should be investigated, in the following we outline specification\ - \ ideas as to how such tokens could be distributed, assuming the proposal to issue\ - \ Gnosis SAFE tokens finds your support and will end up being implemented.\n\nWhen\ - \ designing the SAFE Token distribution model, we followed this principle:\n\n*\ - \ * *\n\n**Distribute the SAFE Token fairly and sustainably across a wide range\ - \ of relevant stakeholders to foster active governance of the Gnosis Safe ecosystem.**\n\ - \n* * *\n\nAt genesis, 1 billion SAFE Tokens are proposed to be minted with the\ - \ following distribution:\n\n * **10% Early Adopters (Users)**\n * Early adopters\ - \ are retrospectively awarded for funds stored and transactions made in the past\ - \ according to a predetermined formula. Additionally, there will be an initial “liquidity\ - \ mining” launch program for users.\n * **2.5% Early Ecosystem Contributors**\n\ - \ * Early contributors are retrospectively awarded for ecosystem contributions\ - \ according to a list of contributions consolidated by Gnosis.\n * **25% GnosisDAO**\n\ - \ * To be decided (see options in “Benefits for GnosisDAO Holders” section)\n\ - \ * **50% SAFE Treasury**\n * SAFE Treasury is a vehicle for rewarding future\ - \ ecosystem contributions initially controlled by Gnosis, but over time, it will\ - \ be governed by SAFE Holders. The SAFE Treasury would have a 10 years vesting period.\ - \ It might also be an option to introduce a yearly inflation rate of 1-3%, which\ - \ would be granted to the SAFE Treasury to sustain its ability to reward contributions\ - \ beyond the vesting period.\n * **12.5% Gnosis Share**\n * Gnosis Share is\ - \ incentivising Gnosis and its staff as core maintainers to have aligned incentives\ - \ and long term commitment to the SAFE Token and the Safe ecosystem. Gnosis Share\ - \ would have a 5 years vesting period.\n\n\n\n[![image](https://forum.gnosis.io/uploads/default/optimized/1X/21a6da3cd57feede46970646e10c5305ffd8284d_2_690x379.jpeg)image1550×852\ - \ 181 KB](https://forum.gnosis.io/uploads/default/original/1X/21a6da3cd57feede46970646e10c5305ffd8284d.jpeg\ - \ \"image\")\n\n## Relationship between SAFE Tokens and GNO Tokens\n\nTo recognise\ - \ the importance of GNO Tokens in the development of Gnosis Safe, we propose that\ - \ 25% of the total SAFE Token supply shall accrue to GNO Tokens. This can be achieved\ - \ through various ways, including a combination of:\n\n 1. **Direct vesting to\ - \ GnosisDAO:** SAFE Tokens are vested into the GnosisDAO Treasury over a period\ - \ of time via a vesting smart contract.\n 2. **Uniswap Pool Liquidity Shares:**\ - \ SAFE Tokens are locked in a Uniswap liquidity pool and are matched by GnosisDAO\ - \ with GNO Tokens. The resulting liquidity shares are then split between GnosisDAO\ - \ and the SAFE Treasury to assure mutual incentive alignment.\n 3. **Bonding curve:**\ - \ A bonding curve is set up, issuing SAFE Tokens for GNO Tokens at an increasing\ - \ exchange rate. If demand for SAFE Tokens increases, this results in an increased\ - \ demand for GNO Tokens.\n 4. **Initial price finding and aligning interest:**\ - \ To find a fair initial price, we propose to conduct an initial price finding for\ - \ GnosisDAO’s SAFE Token share on [Mesa](https://mesa.eth.link/). The GNO Tokens\ - \ received through this are given to the SAFE Treasury to ensure their aligned interest\ - \ with GnosisDAO.\n\n\n\n## Which options do you approve?\n\n * Direct Vesting\n\ - \ * Uniswap LP Shares\n * Bonding Curve\n * Initial Price Finding\n\n\n\n0 voters\n\ - \n> ## Disclaimer\n> \n> The plans outlined in this proposal are subject to discussion\ - \ and change. They may also need to be (re)structured to take account of legal,\ - \ regulatory, or technical developments as well as governance considerations. This\ - \ document should not be taken as the basis for making investment decisions, nor\ - \ be construed as a recommendation to engage in any transactions. You are solely\ - \ responsible for your own investment decisions and transactions.\n\n3 Likes\n\n\ - [GIP 16 - Gnosis Chain - xDAI/Gnosis merge](http://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904/8)\n\ - \n[Discrepancy between SAFE token polls - what does it reveal?](http://forum.gnosis.io/t/discrepancy-between-safe-token-polls-what-does-it-reveal/844)\n\ - \n[Tokens for Gnosis Auction and Cowswap](http://forum.gnosis.io/t/tokens-for-gnosis-auction-and-cowswap/1314/2)\n\ - \n[GNO Utility and Value Proposition](http://forum.gnosis.io/t/gno-utility-and-value-proposition/2344)\n\ - \n[How do we fix the GNO distribution problem?](http://forum.gnosis.io/t/how-do-we-fix-the-gno-distribution-problem/821/16)\n\ - \n[GnosisDAO Manifest](http://forum.gnosis.io/t/gnosisdao-manifest/866)\n\n[GIP-1:\ - \ One-time 5% GNO merkledrop to active GnosisDAO participants](https://forum.gnosis.io/t/gip-1-one-time-5-gno-merkledrop-to-active-gnosisdao-participants/690/8)\n\ - \n**[next page →](/t/gip-2-safe-token-model/691?page=2)**\n" -start: 1604481878 -end: null -state: - - pending - - phase-2 -author: Anna George -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-20.yml b/public/GIPs/GIP-20.yml deleted file mode 100644 index 9ddf7d33..00000000 --- a/public/GIPs/GIP-20.yml +++ /dev/null @@ -1,31 +0,0 @@ -id: '0x86cb89a974a075451f8bfae1892d08136fae8c4321ada07025ff8b2b5edddadc' -gip_number: '20' -url: https://snapshot.org/#/gnosis.eth/proposal/0x86cb89a974a075451f8bfae1892d08136fae8c4321ada07025ff8b2b5edddadc -title: Karpatkey DAO Treasury Management -body: "Should GnosisDAO implement GIP-20, as detailed in the following forum post?:\ - \ https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233\n\nTransactions\ - \ included in this proposal:\n - Set the Active Treasury Managemet wallet (Daughter\ - \ Safe) threshold to 3 signers. This Safe was created in GIP-17.\n- Add 2 Karpatkey's\ - \ signers to Daughter Safe.\n- Add GnosisDAO's trusted signers to Daughter Safe.\n\ - - Send 326797 RAI investment to Karpatkey DAO." -start: 1641481200 -end: 1642086000 -state: closed -author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 146970.63419005522 -scores: - - 146924.34160450587 - - 46.29258554934886 - - 0 -votes: 188 -quorum: 0 -funding: - amount: '326797' - currency: RAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-21.yml b/public/GIPs/GIP-21.yml deleted file mode 100644 index 4c7b836a..00000000 --- a/public/GIPs/GIP-21.yml +++ /dev/null @@ -1,34 +0,0 @@ -id: '0xfae50f95e3ae8f7dbd70e062cba35b0dcbe8261b2aaa874822b7d046e97367b6' -gip_number: '21' -url: https://snapshot.org/#/gnosis.eth/proposal/0xfae50f95e3ae8f7dbd70e062cba35b0dcbe8261b2aaa874822b7d046e97367b6 -title: Amendment to GIP-17. Send additional funds to daughter Safe -body: 'Should GnosisDAO implement GIP-21 as detailed in this forum post? - - - https://forum.gnosis.io/t/gip-21-amendment-to-gip-17-send-additional-funds-to-daughter-safe/2699 - - - Transactions in this proposal: - - - Send tokens to Daughter Safe' -start: 1641553200 -end: 1642158000 -state: closed -author: '0x2408F8a0475D3823A1F4A4bfD86B2a4B80E6eDB6' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 141170.3171749477 -scores: - - 141141.1531327937 - - 29.164042153983424 - - 0 -votes: 131 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'Low ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-22.yml b/public/GIPs/GIP-22.yml deleted file mode 100644 index 4a236022..00000000 --- a/public/GIPs/GIP-22.yml +++ /dev/null @@ -1,32 +0,0 @@ -id: '0x632b3303cf9677d9d381e8eaff3587ee80f76152ebcf62d5260c64d79e417972' -gip_number: '22' -url: https://snapshot.org/#/gnosis.eth/proposal/0x632b3303cf9677d9d381e8eaff3587ee80f76152ebcf62d5260c64d79e417972 -title: Partnership Agreement Between BalancerDAO & GnosisDAO -body: 'Should GnosisDAO implement GIP-22 as detailed in this forum post? - - - https://forum.gnosis.io/t/gip-22-partnership-agreement-between-balancerdao-gnosisdao/3102 - - - Balancer would transfer 200,000 BAL and Gnosis would transfer 9051 GNO.' -start: 1642764180 -end: 1643382000 -state: closed -author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 81579.20895571685 -scores: - - 81579.20895571685 - - 0 - - 0 -votes: 131 -quorum: 0 -funding: - amount: 200,000 - currency: BAL - confidence: High - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-23-redo0.yml b/public/GIPs/GIP-23-redo0.yml deleted file mode 100644 index 59b8bd75..00000000 --- a/public/GIPs/GIP-23-redo0.yml +++ /dev/null @@ -1,32 +0,0 @@ -id: '0x1e3d1b82263ea10863e88f605d2b10f90c3002df0a8b3e27db3a7e1525dcf49a' -gip_number: '23' -url: https://snapshot.org/#/gnosis.eth/proposal/0x1e3d1b82263ea10863e88f605d2b10f90c3002df0a8b3e27db3a7e1525dcf49a -title: 2nd amendment to GIP-17. Add authority of Instadapp SCW to daughter Safe -body: 'Should GnosisDAO add authority of the Instadapp DSA to the Daughter Safe as - detailed in this forum post? - - - https://forum.gnosis.io/t/gip-23-2nd-amendment-to-gip-17-add-authority-of-instadapp-scw-to-daughter-safe/3239 - - ' -start: 1643371200 -end: 1643976000 -state: closed -author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 38364.92486571324 -scores: - - 38364.92486571324 - - 0 - - 0 -votes: 111 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-23.yml b/public/GIPs/GIP-23.yml deleted file mode 100644 index a4300b5a..00000000 --- a/public/GIPs/GIP-23.yml +++ /dev/null @@ -1,32 +0,0 @@ -id: '0x700338be6de83b533516bfed95f51a96dd6680cfae9751366b69a592e2d8386a' -gip_number: '23' -url: https://snapshot.org/#/gnosis.eth/proposal/0x700338be6de83b533516bfed95f51a96dd6680cfae9751366b69a592e2d8386a -title: 2nd amendment to GIP-17. Add authority of Instadapp SCW to daughter Safe -body: 'Should GnosisDAO add authority of the Instadapp DSA to the Daughter Safe as - detailed in this forum post? - - - https://forum.gnosis.io/t/gip-23-2nd-amendment-to-gip-17-add-authority-of-instadapp-scw-to-daughter-safe/3239 - - ' -start: 1644235200 -end: 1644858000 -state: closed -author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 86335.16306629642 -scores: - - 82864.64677082036 - - 3470.5162954760644 - - 0 -votes: 91 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-24.yml b/public/GIPs/GIP-24.yml deleted file mode 100644 index 51c6e88f..00000000 --- a/public/GIPs/GIP-24.yml +++ /dev/null @@ -1,30 +0,0 @@ -id: '0x9c53b972174d6947627b37ffa332bd9301b9f5d8328e8de62b63a601b71d0656' -gip_number: '24' -url: https://snapshot.org/#/gnosis.eth/proposal/0x9c53b972174d6947627b37ffa332bd9301b9f5d8328e8de62b63a601b71d0656 -title: 1st phase 50K GNO Incentives Program for Gnosis Chain as proposed in GIP-16 -body: 'Should GnosisDAO execute the 1st phase 50K GNO Incentives Program for Gnosis - Chain as detailed in this forum post? - - - https://forum.gnosis.io/t/gip-24-1st-phase-50k-gno-incentives-program-for-gnosis-chain-as-proposed-in-gip-16/3417' -start: 1647429755 -end: 1648047600 -state: closed -author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 78881.31252895085 -scores: - - 78881.31252895085 - - 0 - - 0 -votes: 95 -quorum: 0 -funding: - amount: 50,000 - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-25.yml b/public/GIPs/GIP-25.yml deleted file mode 100644 index 1d2a222e..00000000 --- a/public/GIPs/GIP-25.yml +++ /dev/null @@ -1,30 +0,0 @@ -id: '0x1bced50847e2983ae4ba9ae00fd08e92a26059449c30c1dfd49bc077ecc3ee22' -gip_number: '25' -url: https://snapshot.org/#/gnosis.eth/proposal/0x1bced50847e2983ae4ba9ae00fd08e92a26059449c30c1dfd49bc077ecc3ee22 -title: Partner with Tornado Cash to increase GNO:TORN liquidity in Uniswap V3 -body: 'Should GnosisDAO partner with Tornado Cash to increase GNO:TORN liquidity as - detailed in this forum post? - - - https://forum.gnosis.io/t/gip-25-partner-with-tornado-cash-to-increase-gno-torn-liquidity-in-uniswap-v3/3418' -start: 1644318000 -end: 1644922800 -state: closed -author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 79476.92150540843 -scores: - - 78488.99146802588 - - 987.930037382559 - - 0 -votes: 93 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-26.yml b/public/GIPs/GIP-26.yml deleted file mode 100644 index 2e73c094..00000000 --- a/public/GIPs/GIP-26.yml +++ /dev/null @@ -1,60 +0,0 @@ -id: gip-26-partner-with-1inch-to-increase-gno-1inch-liquidity -gip_number: 26 -url: https://forum.gnosis.io/t/gip-26-partner-with-1inch-to-increase-gno-1inch-liquidity -title: 1INCH liquidity -body: "## Simple Summary\n\nThis is a continuation of [F117’s post](https://forum.gnosis.io/t/should-gnosisdao-partner-with-1inch-to-increase-gno-1inch-liquidity/3284).\ - \ \nAs part of the growth of GnosisDAO’s strategic partnerships, increasing the\ - \ liquidity of pairs with our GNO token and our partners’ is in our DAO’s best interest.\ - \ This creates synergy between us and our partners, strengthening both our token\ - \ and theirs in terms of potential price increase and reduced volatility.\n\n##\ - \ Abstract\n\nWe would partner with 1inch and create a GNO:1inch liquidity pool\ - \ that could be deposited on 1Inch protocol, running on Gnosis Chain. In this particular\ - \ case, there’s the positive side effect that increasing overall liquidity in the\ - \ Gnosis Chain also makes it more appealing for investors in the DeFi ecosystem\ - \ as both tokens would support each other’s prices, creating long term economic\ - \ alignment.\n\n## Motivation\n\n1inch is one of the most popular DEX Aggregators\ - \ in the DeFi ecosystem, and it lacks liquidity of the GNO:1INCH pair. We believe\ - \ that creating this liquidity pool will be beneficial for both tokens, contributing\ - \ to their long term price stability and providing users with sufficient liquid\ - \ funds to exchange their tokens.\n\n## Specification\n\nWe’d work jointly with\ - \ the 1inch team to create the liquidity pool in several batches to minimize slippage,\ - \ aiming for 0.1%, to prevent arbitration that would result in loss of funds for\ - \ 1inch and GnosisDAO.\n\n## Rationale\n\nThe iterative pool creation process is\ - \ a best practice which results in slippage minimization and reduced arbitrage opportunities\ - \ which lead to loss of funds from both parties, causing an evitable unwanted side\ - \ effect. \nThe 1inch team will lead the process, since the pool will most likely\ - \ be created in their platform.\n\n[Karpatkey: 2022 Year in Review for Gnosis](http://forum.gnosis.io/t/karpatkey-2022-year-in-review-for-gnosis/6431)\n" -start: 1643730950 -end: null -state: - - phase-2 -author: 'Karpatkey - - status: phase 2 - - type: Meta - - created: 2022-02-01 - - - - Simple Summary - - This i…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-27-redo0.yml b/public/GIPs/GIP-27-redo0.yml deleted file mode 100644 index d7bdaf45..00000000 --- a/public/GIPs/GIP-27-redo0.yml +++ /dev/null @@ -1,33 +0,0 @@ -id: '0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61' -gip_number: '27' -url: https://snapshot.org/#/gnosis.eth/proposal/0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61 -title: Gnosis Guild 🪐 Treasury Allocation to Gnosis Ltd -body: 'The proposal would fund Gnosis Ltd. to support the Gnosis Guild team’s operations - and startup costs for one year. The Gnosis Guild Treasury Allocation would foster - needs-driven development of the Zodiac DAO tools at a total of USD ~$2.9 Million - equivalent, paid in 56% GNO for a contributor incentivization plan, administered - by Gnosis Guild with a two-year cliff followed by a one-year vesting period. - - - [Full proposal -->](https://forum.gnosis.io/t/gip-27-gnosis-guild-treasury-allocation-to-gnosis-ltd/3429)' -start: 1648557747 -end: 1649162547 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 108308.30495903963 -scores: - - 108224.3850090502 - - 5.217136755635344 - - 78.70281323376906 -votes: 309 -quorum: 0 -funding: - amount: 2.9 Million - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-27.yml b/public/GIPs/GIP-27.yml deleted file mode 100644 index cd8058d3..00000000 --- a/public/GIPs/GIP-27.yml +++ /dev/null @@ -1,28 +0,0 @@ -id: '0xd9e0a46cd0c9cefb45ec53b194d08681109ee1a6c0cee3e699740fa14d20291b' -gip_number: '27' -url: https://snapshot.org/#/gnosis.eth/proposal/0xd9e0a46cd0c9cefb45ec53b194d08681109ee1a6c0cee3e699740fa14d20291b -title: '[redo]Gnosis Guild 🪐 Treasury Allocation to Gnosis Ltd' -body: This is a redo of the proposal for [GIP-27](https://snapshot.org/#/gnosis.eth/proposal/0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61) - as the attached transactions were not executed in time and have subsequently expired. - 😅 -start: 1650892790 -end: 1651497590 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 193458.1773878814 -scores: - - 193450.47069473672 - - 5.281144641625198 - - 2.4255485030795865 -votes: 774 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-28.yml b/public/GIPs/GIP-28.yml deleted file mode 100644 index 8d49ac2f..00000000 --- a/public/GIPs/GIP-28.yml +++ /dev/null @@ -1,38 +0,0 @@ -id: '0x521efc4aaa8e2d2e2405ae91207d07d872286257044dfca5aa7764c7f66dd3d8' -gip_number: '28' -url: https://snapshot.org/#/gnosis.eth/proposal/0x521efc4aaa8e2d2e2405ae91207d07d872286257044dfca5aa7764c7f66dd3d8 -title: Allow locked and staked GNO to vote -body: 'The proposal is [detail on the Gnosis forum](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357), - with the specification detailed in [this reply](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/18?u=auryn_macmillan). - - - # Simple summary - - The current Snapshot strategy only accounts for GNO on mainnet. The proposed update - accounts for GNO, LGNO, MGNO, and staked GNO on Gnosis Chain and Mainnet (where - applicable). - - - *Note: a future proposal will also account for GNO deposited in various AMMs and - lending protocols.*' -start: 1647531387 -end: 1648137600 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 87082.69296496826 -scores: - - 87082.16293775123 - - 0.1 - - 0.4300272170417151 -votes: 114 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-29-redo0.yml b/public/GIPs/GIP-29-redo0.yml deleted file mode 100644 index 505e0416..00000000 --- a/public/GIPs/GIP-29-redo0.yml +++ /dev/null @@ -1,26 +0,0 @@ -id: Qmd1zkgLEhQwUkY5oAQxznb2U8ZDkcmRpVBCZHjafvoD69 -gip_number: '29' -url: https://snapshot.org/#/gnosis.eth/proposal/Qmd1zkgLEhQwUkY5oAQxznb2U8ZDkcmRpVBCZHjafvoD69 -title: Extend GNO Token Lock by another 2 weeks for GIP29 -body: '' -start: 1645113984 -end: 1645373184 -state: closed -author: '0xc37506BF10d70eCDd8C6E2917bF4A07670c48aE3' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 118.41266695563579 -scores: - - 118.4126669556358 - - 0 - - 0 -votes: 41 -quorum: 0 -funding: - amount: null - currency: null - confidence: Low - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-29.yml b/public/GIPs/GIP-29.yml deleted file mode 100644 index 6cd441e6..00000000 --- a/public/GIPs/GIP-29.yml +++ /dev/null @@ -1,41 +0,0 @@ -id: '0x5187694133abfb3d140acce3b9ac2ecf033c657c816a18dc25d2e0c1a2a29ec7' -gip_number: '29' -url: https://snapshot.org/#/gnosis.eth/proposal/0x5187694133abfb3d140acce3b9ac2ecf033c657c816a18dc25d2e0c1a2a29ec7 -title: Spin-off SafeDAO and Launch Safe Token -body: 'This proposal ratifies: - - - - Spin-off the Gnosis Safe project from Gnosis Ltd. - - - Create a Safe Token to govern the Gnosis Safe ecosystem and infrastructure through - the establishment of an independent SafeDAO. - - - Setup the independent Safe Foundation in Switzerland to protect strategic off-chain - assets (IP, Github repositories, strategic investments), issue the Safe Token, and - foster the Gnosis Safe ecosystem. - - - [Full Proposal -->](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token) - - ' -start: 1649415518 -end: 1650020318 -state: closed -author: '0x88673F0ed0280cBd33C29f070DeE0a09948FAea9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 191079.79100087727 -scores: - - 190282.44985763263 - - 792.5155925659184 - - 4.8255506787302425 -votes: 928 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-3.yml b/public/GIPs/GIP-3.yml deleted file mode 100644 index a2d42a06..00000000 --- a/public/GIPs/GIP-3.yml +++ /dev/null @@ -1,36 +0,0 @@ -id: QmdjWuBnBnPUafW9jBNNsJJvaeQAVExGcFZ7zB38VtNuu4 -gip_number: '3' -url: https://snapshot.org/#/gnosis.eth/proposal/QmdjWuBnBnPUafW9jBNNsJJvaeQAVExGcFZ7zB38VtNuu4 -title: Set the quorum for "yes" votes to 4% of the circulating supply of GNO -body: '# Simple Summary - - **Lower the quorum threshold for required "yes" votes to 4% of the circulating GNO - supply.** - - - *See the [forum post](https://forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915) - for more details and discussion.* - - - [forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915](https://forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915)' -start: 1607922000 -end: 1608613140 -state: closed -author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 200807.89506428977 -scores: - - 200807.89506428977 - - 0 - - 0 -votes: 59 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-30.yml b/public/GIPs/GIP-30.yml deleted file mode 100644 index 7ed63097..00000000 --- a/public/GIPs/GIP-30.yml +++ /dev/null @@ -1,37 +0,0 @@ -id: gip-30-should-gnosisdao-reward-2300-gno-to-prysmatic-labs -gip_number: 30 -url: https://forum.gnosis.io/t/gip-30-should-gnosisdao-reward-2300-gno-to-prysmatic-labs -title: Should GnosisDAO reward 2300 GNO to Prysmatic Labs? -body: "## Summary\n\nShould GnosisDAO reward 2300 GNO to Prysmatic Labs?\n\nSince\ - \ the launch of the [Gnosis Beacon Chain](https://beacon.gnosischain.com/) over\ - \ 60000 validators were launched. Those validators almost exclusively run either\ - \ Prysm or Lighthouse clients.\n\nGiven the importance of Prysm for Gnosis Chain,\ - \ we suggest rewarding the Prysmatic Labs team with 2300 GNO for their work aligning\ - \ incentives with their team.\n\nIn return the Prysmatic Labs team will support\ - \ Gnosis Chain in the following ways:\n\n * A direct communication channel with\ - \ the Gnosis Chain Team.\n * Acceptance and maintenance of minor changes to Prysm\ - \ codebase to support Gnosis Chain.\n * Acknowledgment and timely review of any\ - \ performance, regression, or general reports from Gnosis regarding Prysm software.\n\ - \ * General feedback on gnosis chain and tooling.\n\n\n\n5 Likes\n" -start: 1646939789 -end: null -state: - - phase-2 -author: GnosisDAO -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: '2300' - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-31.yml b/public/GIPs/GIP-31.yml deleted file mode 100644 index 58de53bf..00000000 --- a/public/GIPs/GIP-31.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0xa5245b0893ee9faeefd865439751c6a96a6c948ce578c4eab2a12313b39bf1aa' -gip_number: '31' -url: https://snapshot.org/#/gnosis.eth/proposal/0xa5245b0893ee9faeefd865439751c6a96a6c948ce578c4eab2a12313b39bf1aa -title: Should Gnosis Chain perform a Hardfork to upgrade the token contract vulnerable - to the reentrancy attack? -body: The hard fork assumes to update Gnosis Chain spec file (explicitly or through - node upgrading with the new internal spec) on all nodes and upgrade the nodes themselves - to the new version supporting dao-like hard forks. -start: 1650216802 -end: 1650821602 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 63438.93959378386 -scores: - - 63276.354651802576 - - 0.2178027672264804 - - 162.3671392140603 -votes: 532 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-32.yml b/public/GIPs/GIP-32.yml deleted file mode 100644 index 45514028..00000000 --- a/public/GIPs/GIP-32.yml +++ /dev/null @@ -1,53 +0,0 @@ -id: '0x34b39da3317f217bf414feb781042a6f255982f4a0c2aad4f2945866e74bf95d' -gip_number: '32' -url: https://snapshot.org/#/gnosis.eth/proposal/0x34b39da3317f217bf414feb781042a6f255982f4a0c2aad4f2945866e74bf95d -title: Reimburse expenditures to the Gnosis Chain Core Development Unit (formerly - xDai Chain team) -body: 'Summary - - GIP-32 requests reimbursement of infrastructure and marketing-related expenditures - to the Gnosis Chain Core Development Unit (formerly xDai Chain team) for the period - spanning the token merge (GIP-16 implementation) through March 1st, 2022. - - - Motivation - - The Gnosis Chain Core Development Unit is a critical component of the evolving Gnosis - ecosystem. Previous expenditures were provided up-front by the team to facilitate - client development and bootstrap the consensus-layer validator set. These were distributed - from an independent fund managed by the Core Dev Unit to expedite processes with - the expectation that they would be reimbursed at a future date. This GIP details - prior expenditures and requests they are reimbursed from the GnosisDAO treasury. - - - ![image](ipfs://QmNbgiSD9x1pt4nm9CzHKB8Tvk7Ka2NZFwmto1cy3Gjvn2) - - - Implementation - - The Unit has a multi-signature wallet to administer the funds allocated to fulfilling - the mandate. The details of this multi-sig wallet are as follows: - - - Multisig address on ETH mainnet: 0x5E78C09984bd6608f8E913F0924062C043eD6ad7' -start: 1649239154 -end: 1649843954 -state: closed -author: '0x7D7DcEf3bB919347F5031127799ee2679A9111A0' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 155985.79006397788 -scores: - - 155985.5084921285 - - 0.12627464414891498 - - 0.15529720523870943 -votes: 566 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-33.yml b/public/GIPs/GIP-33.yml deleted file mode 100644 index c8924b1a..00000000 --- a/public/GIPs/GIP-33.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0x66cc99dde505a77ae6fb1371c075f4eb36abbba06189d108b2020947484fa49c' -gip_number: '33' -url: https://snapshot.org/#/gnosis.eth/proposal/0x66cc99dde505a77ae6fb1371c075f4eb36abbba06189d108b2020947484fa49c -title: 'Send vested COW tokens to daughter Safe for treasury management ' -body: 'Should Gnosis DAO send vested COW tokens to daughter Safe for treasury management? - - - https://forum.gnosis.io/t/gip-33-should-gnosis-dao-send-vested-cow-tokens-to-daughter-safe-for-treasury-management/4453' -start: 1649968938 -end: 1650573738 -state: closed -author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 148037.82368390795 -scores: - - 148025.58429791607 - - 1.051077759903439 - - 11.1883082320004 -votes: 465 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-34.yml b/public/GIPs/GIP-34.yml deleted file mode 100644 index efd9b6e0..00000000 --- a/public/GIPs/GIP-34.yml +++ /dev/null @@ -1,30 +0,0 @@ -id: '0xd8d2657cb3d7c711978b58de7cdd956541f72832809e73fbd2c122b6a5fd6e1e' -gip_number: '34' -url: https://snapshot.org/#/gnosis.eth/proposal/0xd8d2657cb3d7c711978b58de7cdd956541f72832809e73fbd2c122b6a5fd6e1e -title: Should Gnosis DAO support in a reimbursement plan to the Agave Community? -body: The motivation for this proposal is to make sure the Agave community and affected - GC users are reimbursed at the end of this operation and that the community and - protocol can continue the journey that started one year ago. We believe it is critical - for the chain to make sure a significant amount of the long-term builders, supporters, - and communities in the chain are restored on their losses as much as possible. -start: 1649688035 -end: 1650292835 -state: closed -author: '0xc44caeb7F0724A156806664d2361fD6f32a2d2C8' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 97912.53542649369 -scores: - - 96857.43654326974 - - 778.5120599694304 - - 276.58682325448115 -votes: 630 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-35.yml b/public/GIPs/GIP-35.yml deleted file mode 100644 index 82dbe503..00000000 --- a/public/GIPs/GIP-35.yml +++ /dev/null @@ -1,31 +0,0 @@ -id: '0xdeadb69e1c18ea78e6592664d2be34f7705ebb040c0b1788514b39bd9a2e2096' -gip_number: '35' -url: https://snapshot.org/#/gnosis.eth/proposal/0xdeadb69e1c18ea78e6592664d2be34f7705ebb040c0b1788514b39bd9a2e2096 -title: The target total supply should be 3M GNO? -body: 'This GIP would improve economics and clarity of GNO rules by targeting 3M GNO - total supply. It would also formally veto the GnosisDAO treasury for voting, giving - more voting power to GNO holders. - - - https://forum.gnosis.io/t/gip-35-the-target-total-supply-should-be-3m-gno/4685' -start: 1650993954 -end: 1651598754 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 328264.5800297518 -scores: - - 326951.8460755976 - - 1302.099837240443 - - 10.634116913854475 -votes: 881 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-36.yml b/public/GIPs/GIP-36.yml deleted file mode 100644 index 42f00191..00000000 --- a/public/GIPs/GIP-36.yml +++ /dev/null @@ -1,34 +0,0 @@ -id: '0x391d0d6f4b9315347605ecf053a14474faa461ea0a31e69b7e9e1895c31c3a2a' -gip_number: '36' -url: https://snapshot.org/#/gnosis.eth/proposal/0x391d0d6f4b9315347605ecf053a14474faa461ea0a31e69b7e9e1895c31c3a2a -title: Should GnosisDAO fund BuidlGuidl 3 ETH per quarter? -body: 'The BuidlGuidl is a curated group of Ethereum builders creating prototypes - and tutorials to enrich the ecosystem. They actively maintain scaffold-eth. Austin - Griffith and BuidlGuidl can be a source of new talent for the Gnosis ecosystem. - We can think of new quests to add, which might lead to new hires for Safe, CowSwap, - or Gnosis Chain projects. - - - This GIP proposes to fund BuidlGuidl with 3 ETH per quarter sent to buidlguidl.eth - from the GnosisDAO treasury.' -start: 1651595561 -end: 1652200361 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 86754.93861010374 -scores: - - 86587.72187842286 - - 127.152128117465 - - 40.06460356342636 -votes: 738 -quorum: 0 -funding: - amount: '3' - currency: ETH - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-37.yml b/public/GIPs/GIP-37.yml deleted file mode 100644 index ef0c5233..00000000 --- a/public/GIPs/GIP-37.yml +++ /dev/null @@ -1,31 +0,0 @@ -id: '0xc259665ade2a09959d0978d31708537d42ade4c1fc9b9c459cf08611188f76de' -gip_number: '37' -url: https://snapshot.org/#/gnosis.eth/proposal/0xc259665ade2a09959d0978d31708537d42ade4c1fc9b9c459cf08611188f76de -title: Should GnosisDAO pass a Grant Proposal to partner with Erigon? -body: Gnosis has been a long-term supporter of Erigon’s development believing in the - significance of improving L1 clients. Every improvement on L1 is an upside for everyone - operating on top. Given the importance of strong L1 clients for Gnosis Chain and - the unique value proposition of Erigon, the Erigon team should be supported with - a significant grant of 2m DAI upfront and 24k GNO vested over 3 years allowing us - to focus on Gnosis Chain. -start: 1650645478 -end: 1651250278 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 182019.8233142736 -scores: - - 181686.93848145075 - - 291.7462475437427 - - 41.13858527913516 -votes: 647 -quorum: 0 -funding: - amount: 2,000,000 - currency: DAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-38.yml b/public/GIPs/GIP-38.yml deleted file mode 100644 index 36955e1d..00000000 --- a/public/GIPs/GIP-38.yml +++ /dev/null @@ -1,36 +0,0 @@ -id: '0x573707c047a3a3581ed25b91088a3aa7b4813e79d04aa67b576f151eca7f05ef' -gip_number: '38' -url: https://snapshot.org/#/gnosis.eth/proposal/0x573707c047a3a3581ed25b91088a3aa7b4813e79d04aa67b576f151eca7f05ef -title: Should GnosisDAO fund a Gnosis Chain ecosystem growth initiative? -body: 'The GnosisDAO should fund a concerted ecosystem development effort to support - developers and projects building on the Gnosis Chain with investments, grants, technical - supports, business development and marketing. - - - As soon as the structure for the investment fund is ready, GnosisDAO commits to - send $59.36M worth of stablecoins to the designated fund multisig. - - - As soon as the structure for the operations company is ready, GnosisDAO commits - to send $20M worth of stablecoins and 50k GNO to the designated company multisg.' -start: 1651162151 -end: 1651766951 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 143093.97341955925 -scores: - - 137154.8685425695 - - 3846.8241831188416 - - 2092.2806938709086 -votes: 831 -quorum: 0 -funding: - amount: 59.36M - currency: USD (assuming stablecoins are pegged to USD) - confidence: High - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-39.yml b/public/GIPs/GIP-39.yml deleted file mode 100644 index 097303c4..00000000 --- a/public/GIPs/GIP-39.yml +++ /dev/null @@ -1,31 +0,0 @@ -id: '0x7b1a6d6a550738d45bb8063fadcbb2b9653141ab0b9a19c5011b5fe2d4134ba0' -gip_number: '39' -url: https://snapshot.org/#/gnosis.eth/proposal/0x7b1a6d6a550738d45bb8063fadcbb2b9653141ab0b9a19c5011b5fe2d4134ba0 -title: Should GnosisDAO fund the DAOstar One initiative? -body: '$20,000 to fund an ecosystem collaboration around interoperable standards for - DAOs and DAO tooling, as part of a co-funding round led by key organizations in - the DAO ecosystem. - - - https://forum.gnosis.io/t/gip-39-should-gnosisdao-fund-the-daostar-one-initiative/4712/1' -start: 1651081032 -end: 1651685832 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 114268.32204443366 -scores: - - 114254.07811486912 - - 0.3114845300830897 - - 13.932445034450003 -votes: 718 -quorum: 0 -funding: - amount: 20,000 - currency: $ - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-40.yml b/public/GIPs/GIP-40.yml deleted file mode 100644 index 3d229ec9..00000000 --- a/public/GIPs/GIP-40.yml +++ /dev/null @@ -1,39 +0,0 @@ -id: '0x1229020e53e1b973192e8c274e5109970ab58cc9127ae4d438aad7943d451ae9' -gip_number: '40' -url: https://snapshot.org/#/gnosis.eth/proposal/0x1229020e53e1b973192e8c274e5109970ab58cc9127ae4d438aad7943d451ae9 -title: 'Should Gnosis DAO support a reimbursement plan to the Hundred Finance Community - in the following manner? ' -body: 'On March 15th, 2022, the Gnosis Chain deployment of the Hundred Finance lending - platform was exploited. This exploit drained liquidity across all of Hundred Finance’s - Gnosis Chain markets, resulting in a loss of the equivalent of around $6.4m USD - in user funds (calculated using asset prices at the time of the attack). - - - The Hundred Finance team seeks to put forward this new version of a previously raised - proposal that similarly seeks to respond to the exploit on behalf of its affected - users by implementing a reimbursement plan in which they and the Gnosis DAO work - together to make whole those who have been adversely impacted. - - - Please reference the entire proposal by clicking the discussion link below. ' -start: 1651594975 -end: 1652199775 -state: closed -author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 90796.04687114357 -scores: - - 81535.36590171546 - - 9193.13620072608 - - 67.54476870199478 -votes: 734 -quorum: 0 -funding: - amount: 6.4m - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-41.yml b/public/GIPs/GIP-41.yml deleted file mode 100644 index 15f65c15..00000000 --- a/public/GIPs/GIP-41.yml +++ /dev/null @@ -1,27 +0,0 @@ -id: '0x84380477f05620ec1e27be75833b90cdda44b1a1ecb905d4a42b68c25640961b' -gip_number: '41' -url: https://snapshot.org/#/gnosis.eth/proposal/0x84380477f05620ec1e27be75833b90cdda44b1a1ecb905d4a42b68c25640961b -title: GIP-41 Should GnosisDAO Partner with Giveth to Increased Sustainable Liquidity? -body: Mutually beneficial token swap to create a 1M USD equivalent shared liquidity - pool of $500k GIV <> $500k GNO on Honeyswap (Gnosis Chain). -start: 1652754648 -end: 1653359448 -state: closed -author: '0xbc42dD78EE35D8F165440749F98C7Ec93F0c4033' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 131153.66358357065 -scores: - - 131116.181224077 - - 0.19216576778192407 - - 37.29019372586643 -votes: 610 -quorum: 0 -funding: - amount: 1,000,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-42.yml b/public/GIPs/GIP-42.yml deleted file mode 100644 index d5ecd32c..00000000 --- a/public/GIPs/GIP-42.yml +++ /dev/null @@ -1,46 +0,0 @@ -id: '0x1a0a2187520c70a0c37ab1aedccdda97c12453a709dd217b5456d610cbaaaa10' -gip_number: '42' -url: https://snapshot.org/#/gnosis.eth/proposal/0x1a0a2187520c70a0c37ab1aedccdda97c12453a709dd217b5456d610cbaaaa10 -title: Should $10M in GNO be used to foster the usage of Uniswap v3 on Gnosis Chain? -body: 'A large directive for the Gnosis Chain is to increase the user base and on-chain - activity by strategically allocating funds from the GnosisDAO treasury to promote - adoption. An ecosystem fund has been created for this purpose, and we propose to - use a portion of these funds to promote Uniswap v3 on Gnosis Chain. We propose providing - up to $10M to incentivize the adoption of Uniswap v3 on Gnosis Chain. - - - Details for incentivized Adoption of Uniswap v3 - - - The $10M will be provided in GNO to foster the usage of Uniswap v3 on Gnosis Chain. - The incentives should be designed together with other projects, which are operating - on top of Uniswap v3 such as Perpetual Protocol, Gelato, or Stakewise. This should - allow for more sustainable utilization of Uniswap as Gnosis Chain doesn’t have a - team dedicated to Uniswap v3. The GNO can be used to incentivize liquidity but should - not be limited to this use case. Anything increasing usage of Uniswap v3, including - building new applications on top of Uniswap v3 should be supported. The goal is - to spend the $10M in the time period of 2 years. Funds not used after two years - would go back to GnosisDAO. The spending is limited to $10M and the transferred - amount of GNO as part of the proposal. GnosisDAO can decide to top up this amount - based on the outcome of this initiative.' -start: 1652362561 -end: 1652967361 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 133073.09734005702 -scores: - - 132941.09051992954 - - 58.81220165266376 - - 73.19461847474483 -votes: 912 -quorum: 0 -funding: - amount: 10,000,000 - currency: $ (USD) - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-44.yml b/public/GIPs/GIP-44.yml deleted file mode 100644 index fe0eda39..00000000 --- a/public/GIPs/GIP-44.yml +++ /dev/null @@ -1,35 +0,0 @@ -id: '0x2dabb9a7bdf9d4a964579dc3ad15af771261a42f4efc74a7f847e7860a651170' -gip_number: '44' -url: https://snapshot.org/#/gnosis.eth/proposal/0x2dabb9a7bdf9d4a964579dc3ad15af771261a42f4efc74a7f847e7860a651170 -title: Allow GNO holders to vote with invested/staked/locked positions in mainnet/gc -body: 'Following from GIP-28, this proposal enables those holding and using GNO in - a greater number of places to retain their vote in the GnosisDAO. - - - Currently, the GnosisDAO’s Snapshot strategy counts GNO on mainnet and Gnosis Chain, - along with LGNO, mGNO, and some GBC staking deposits on Gnosis Chain. - - - If approved, this proposal will allow users providing liquidity on various AMMs - to retain their voting power, along with counting all GBC staking deposits.' -start: 1652796837 -end: 1653401637 -state: closed -author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 134098.8930439684 -scores: - - 134047.5221251944 - - 40.31806902839211 - - 11.052849745595813 -votes: 852 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-45.yml b/public/GIPs/GIP-45.yml deleted file mode 100644 index facc0a33..00000000 --- a/public/GIPs/GIP-45.yml +++ /dev/null @@ -1,31 +0,0 @@ -id: '0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1' -gip_number: '45' -url: https://snapshot.org/#/gnosis.eth/proposal/0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1 -title: Should Trustlines Network migrate to Gnosis Chain? -body: 'We propose to migrate the Trustlines Network to the Gnosis Chain and, in the - process, change our identity implementation to use Gnosis Safe. - - - We are requesting funding of 120,000 EUR paid in DAI or GNO tokens. We expect the - work to take between two to four months.' -start: 1653908212 -end: 1654513012 -state: closed -author: '0x21D9bD6099507134a92d2943EcCbADFaBFE1E25e' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 83477.19847840212 -scores: - - 83290.66657671673 - - 176.58744012121173 - - 9.944461564152029 -votes: 749 -quorum: 0 -funding: - amount: 120,000 - currency: EUR - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-46.yml b/public/GIPs/GIP-46.yml deleted file mode 100644 index 23a1f0c0..00000000 --- a/public/GIPs/GIP-46.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0x41af607ec45f147b6f0196353f29c5e25951097c64c3a0a703bc519bd1883578' -gip_number: '46' -url: https://snapshot.org/#/gnosis.eth/proposal/0x41af607ec45f147b6f0196353f29c5e25951097c64c3a0a703bc519bd1883578 -title: Should GNO from the GnosisDAO Safe be transferred to the treasury management - safe operated by Karpatkey? -body: All GNO from the GnosisDAO Safe should be transferred to the treasury management - safe operated by Karpatkey. This will allow GnosisDAO to use GNO as collateral for - loans and payouts of GNO for grants. -start: 1653058160 -end: 1653662960 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 129204.75485924087 -scores: - - 129159.39108746796 - - 27.1487080656233 - - 18.215063707291183 -votes: 774 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-47.yml b/public/GIPs/GIP-47.yml deleted file mode 100644 index 11332d76..00000000 --- a/public/GIPs/GIP-47.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0x495858ef8aef07fc20662023f1690d60150339a09c620d25d76cbf49061bc0bf' -gip_number: '47' -url: https://snapshot.org/#/gnosis.eth/proposal/0x495858ef8aef07fc20662023f1690d60150339a09c620d25d76cbf49061bc0bf -title: Should GnosisDAO pass a Grant Proposal to form a long-term partnership with - Nethermind, Gnosis Chain’s primary node? -body: Nethermind is a vital part of Gnosis Chain. The Nethermind team should be supported - with a significant grant of 3m DAI upfront and 20k GNO vested over 3 years allowing - us to focus on Gnosis Chain. -start: 1653927394 -end: 1654532194 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 174397.1513691828 -scores: - - 174191.0082820708 - - 57.66245134048024 - - 148.4806357715174 -votes: 571 -quorum: 0 -funding: - amount: 3,000,000 - currency: DAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-48.yml b/public/GIPs/GIP-48.yml deleted file mode 100644 index 16a52128..00000000 --- a/public/GIPs/GIP-48.yml +++ /dev/null @@ -1,30 +0,0 @@ -id: '0x012d04c8351991da79e92f4088527c76b6139b9aa0b71772b704b587d2c9c0e3' -gip_number: '48' -url: https://snapshot.org/#/gnosis.eth/proposal/0x012d04c8351991da79e92f4088527c76b6139b9aa0b71772b704b587d2c9c0e3 -title: Should GnosisDAO implement the Praise reward system around the Gnosis Chain - Validator program? -body: 'The Praise system can benefit and grow the Gnosis Chain validator community. - Verified validators in the Gnosis Chain and GnosisDAO Discord can earn small amounts - of GNO for helping community members and for onboarding those interested in running - a validator. ' -start: 1654223456 -end: 1654828256 -state: closed -author: '0xEf0391ccbebf15fc84334D9630255093754cDAAB' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 124531.90219035951 -scores: - - 124476.80327484835 - - 52.647236401691735 - - 2.451679109461167 -votes: 707 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-49.yml b/public/GIPs/GIP-49.yml deleted file mode 100644 index d3af0258..00000000 --- a/public/GIPs/GIP-49.yml +++ /dev/null @@ -1,48 +0,0 @@ -id: '0xf7d4422d6089c9499d7bb9c50100a32dfd4e9b62ce9e0a112a1cfcd4a4ca5512' -gip_number: '49' -url: https://snapshot.org/#/gnosis.eth/proposal/0xf7d4422d6089c9499d7bb9c50100a32dfd4e9b62ce9e0a112a1cfcd4a4ca5512 -title: Should GnosisDAO do a BFF Partnership with MakerDAO? -body: 'GnosisDAO and MakerDAO are naturally aligned with DAI as a common denominator. - Gnosis Chain uses bridged DAI as its gas token so DAI’s adoption is critical for - the success of the network. - - - Gnosis Ltd has already started buying MKR aggressively in the open market so it - makes sense to align efforts with the GnosisDAO. Therefore, we propose the following: - - - 1. Propose a token swap GNO-MKR of around $70 million to the Maker community - - 2. Explore the use of an institutional MakerDAO vault with the GnosisDAO treasury - using GNO + stETH and mint 100 million DAI to be used for the development of the - Gnosis Chain - - 3. Explore a GNO grant with MakerDAO growth core unit to expand global adoption - and brand awareness of Gnosis Chain - - 4. Rebranding xDAI to DAI - - 5. Increase GNO incentives to DAI pairs on Gnosis Chain - - 6. Periodically buy MKR in the open market using GnosisDAO’s treasury farming rewards' -start: 1655200800 -end: 1655805600 -state: closed -author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 87883.87969902478 -scores: - - 87878.54906003183 - - 5.173239307366117 - - 0.15739968560571488 -votes: 690 -quorum: 0 -funding: - amount: 70,000,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-5.yml b/public/GIPs/GIP-5.yml deleted file mode 100644 index 163ad0ff..00000000 --- a/public/GIPs/GIP-5.yml +++ /dev/null @@ -1,55 +0,0 @@ -id: QmfEpoQtvjWMeRwfeFvothLDkFqaXCZNHU9ZFb3S3cuLRU -gip_number: '5' -url: https://snapshot.org/#/gnosis.eth/proposal/QmfEpoQtvjWMeRwfeFvothLDkFqaXCZNHU9ZFb3S3cuLRU -title: Remove Gnosis Impact from the GnosisDAO Governance Process -body: "See the Forum post for all details and discussion: https://forum.gnosis.io/t/gip-5-remove-gnosis-impact-from-the-gnosisdao-governance-process/1058\ - \ \n\nTl;dr\n\nGnosis Impact is currently an integral component of the Gnosis governance\ - \ process. The current implementation of Gnosis Impact has known flaws and poses\ - \ uncalled-for obstacles to pass proposals through the governance process. I therefore\ - \ propose to exclude the obligatory utilization of Gnosis Impact as part of the\ - \ GnosisDAO’s governance process phase 3 until a proposal passes amending its shortcomings.\n\ - \n\nThe Proposal\n\nThe GnosisDAO governance process currently consists of three\ - \ phases:\n1. Informal discussion on Gnosis Forum regarding potential proposal\n\ - 2. Creation of a GIP in the Gnosis Forum, including a Forum poll\n3. Creation\ - \ of proposal on Snapshot + creation of two prediction markets on Omen, with one\ - \ market collateralized in GNO and the other collateralized in a stablecoin + setting\ - \ up the Gnosis Impact plugin.\n\nAs described above, phase 3 of the GnosisDAO Governance\ - \ process is complex and cost intensive, making it less attractive and accessible\ - \ for individuals to move their proposal forward to the final and essential governance\ - \ stage that will decide on the implementation of a proposal.\n\nOther than the\ - \ complexity of setting up Gnosis Impact, the tool itself currently has a few inherent\ - \ flaws:\n- Due to Omen’s Fixed Product Market Maker (FPMM), all funds provided\ - \ to set up the prediction markets are lost: once it becomes clear how the vote\ - \ will turn out traders will buy all the winning tokens. This is making any proposal\ - \ very cost intensive.\n- As setting up Gnosis Impact is very capital intensive,\ - \ it is not worthwhile to process any proposal that involves less than $100k. \n\ - - Price impacts projected by Gnosis Impact are not very accurate as a) the market\ - \ prices for the outcome tokens can only be found as long as it is still open which\ - \ decision will be made on Snapshot and b) because potential profit opportunities\ - \ are debilitated by Omen fees and gas fees. \n\nOnly two proposals have so far\ - \ been processed through phase 3 since GnosisDAO went live in November of last year,\ - \ underlining the complexity of passing proposals through the final stage. Removing\ - \ Gnosis Impact as a mandatory step will make GnosisDAO’s governance process simpler\ - \ and economically viable and will allow more individuals to push their proposal\ - \ to the final stage of governance." -start: 1613455200 -end: 1613754000 -state: closed -author: '0x28eFf6Ece9d2f1e0B5E18D34b50E01a0c91d0c99' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 62025.81640719549 -scores: - - 61185.64040719549 - - 840.1759999999999 - - 0 -votes: 39 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-50.yml b/public/GIPs/GIP-50.yml deleted file mode 100644 index 15da22d3..00000000 --- a/public/GIPs/GIP-50.yml +++ /dev/null @@ -1,43 +0,0 @@ -id: '0x29999cc9fc63fcf386bcbb8bd86d676a6736b0786305d564a642808dacd84611' -gip_number: '50' -url: https://snapshot.org/#/gnosis.eth/proposal/0x29999cc9fc63fcf386bcbb8bd86d676a6736b0786305d564a642808dacd84611 -title: Should TrustSwap deploy smart contract utilities on Gnosis Chain? -body: "https://forum.gnosis.io/t/gip-50-should-trustswap-deploy-smart-contract-utilities-on-gnosis-chain/5282?u=trustswap\n\ - \n[TrustSwap](https://trustswap.com/) is requesting a grant of $50,000 from the\ - \ Gnosis Ecosystem Fund to deploy a full suite of secure smart contract services\ - \ to the Gnosis blockchain.\n\nThis will include:\n\nToken Locks: Our token lock\ - \ platform currently has over $6B TVL across several major blockchains. These secure\ - \ time-locked contracts allow teams to lock up their tokens over a preset period\ - \ of time in a trustless way. This includes Liquidity Pair (LP) tokens and NFTs\ - \ as well.\n\nToken Mint: Anyone can easily generate a new token contract that is\ - \ fully audited and customizable without needing to write any code or hire expensive\ - \ developers. Mint makes it easy to tokenize any project, business, or community.\n\ - \nVesting: The TrustSwap Vesting portal provides a simple and secure way for projects\ - \ to distribute their tokens over time to their team and community. The tokens are\ - \ released in regular increments and users can claim their available tokens whenever\ - \ they want.\n\nBy using TrustSwap services, crypto projects can easily create,\ - \ secure, and launch their new tokens across multiple blockchains currently including\ - \ Ethereum, Polygon, Binance Smart Chain, Avalanche, and more. We would like to\ - \ add Gnosis to this list and appreciate the support of the GnosisDAO community.\ - \ \n\nIf you have any questions, please email info@trustswap.org. Thank you." -start: 1655244000 -end: 1655848800 -state: closed -author: '0x3Fb8410a19137715b430d515996F5D902deC7dD7' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 2033.34308938172 -scores: - - 475.71962348989814 - - 344.141538732446 - - 1213.4819271593726 -votes: 622 -quorum: 0 -funding: - amount: 50,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-51.yml b/public/GIPs/GIP-51.yml deleted file mode 100644 index 41558c87..00000000 --- a/public/GIPs/GIP-51.yml +++ /dev/null @@ -1,36 +0,0 @@ -id: '0x75bd61f48bb1cc4c9e2dd4938036095d581a99f2c186cb0a0c83914253f45634' -gip_number: '51' -url: https://snapshot.org/#/gnosis.eth/proposal/0x75bd61f48bb1cc4c9e2dd4938036095d581a99f2c186cb0a0c83914253f45634 -title: Should GnosisDAO fund the LabDAO project? -body: "Decentralised Science is a movement exploring new ways to 1) fund, 2) do and\ - \ 3) distribute science using web3 tools. LabDAO is building online laboratories\ - \ for scientist to come together and do research. To enable this, we develop three\ - \ tools:\n\n1. An exchange for laboratory services\n2. An onboarding and team-formation\ - \ process for scientists new to web3\n3. An endowment for funding scientific open-source\ - \ developers and inventors\n\nTo support the development of the LabDAO project,\ - \ we ask the GnosisDAO community for 250,000 USD worth of funding in return for\ - \ 1,000,000 LAB future governance and utility tokens.\n\nYou can learn more about\ - \ this proposal in the [governance forum](https://forum.gnosis.io/t/gip-51-should-gnosisdao-fund-the-labdao-project/5288)\ - \ and our [memo](memo.labdao.xyz). \n\nThis governance vote includes a transaction:\n\ - 250,000 FRAX to labdao.eth (eth:0xcaf6A0c4468087d76e6B2917cea10F0E1aA2f9D4)\n" -start: 1655654561 -end: 1656259361 -state: closed -author: '0x64BC15E0A5A12dDbe321EEDD832d057775D11F56' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 165599.17729734717 -scores: - - 90047.70561374047 - - 75535.94601599932 - - 15.525667607435452 -votes: 363 -quorum: 0 -funding: - amount: 250,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-52.yml b/public/GIPs/GIP-52.yml deleted file mode 100644 index 4af8225c..00000000 --- a/public/GIPs/GIP-52.yml +++ /dev/null @@ -1,36 +0,0 @@ -id: '0x5525ab62fffc1102f46fca9ed629ba9a5cd111b1663bd6bb2cb984472325d191' -gip_number: '52' -url: https://snapshot.org/#/gnosis.eth/proposal/0x5525ab62fffc1102f46fca9ed629ba9a5cd111b1663bd6bb2cb984472325d191 -title: Should former xDai team be involved in future Gnosis Chain development? -body: 'The former xDAI team has been instrumental in the operations and the success - of Gnosis Chain. We see big value in continuing with the team, which has accumulated - extraordinary knowledge about the technology and ecosystem of the Gnosis Chain. - - - We propose to use the funds of the former xDAI ecosystem fund (https://etherscan.io/address/0x5e78c09984bd6608f8e913f0924062c043ed6ad7) - to fund the team to contribute to the Gnosis Chain ecosystem in various ways described - in the temperature check proposal: - - - https://snapshot.org/#/gnosis.eth/proposal/0x8c89a5ce77a2ec8d18708777813dcb3e2367a212d76604b93487fb829ed0e6b3' -start: 1655292875 -end: 1655897675 -state: closed -author: '0x6d9ABa400a2a487a5Fb76c6d56518835553CD284' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 126860.32897543388 -scores: - - 103379.23080565956 - - 23476.325736620944 - - 4.772433153425544 -votes: 679 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-53.yml b/public/GIPs/GIP-53.yml deleted file mode 100644 index 3f0ee8ce..00000000 --- a/public/GIPs/GIP-53.yml +++ /dev/null @@ -1,69 +0,0 @@ -id: '0x397b3b0891a1874b34ae60bc95e83293c5599efb3783c602a39939f7754ad6a5' -gip_number: '53' -url: https://snapshot.org/#/gnosis.eth/proposal/0x397b3b0891a1874b34ae60bc95e83293c5599efb3783c602a39939f7754ad6a5 -title: Should GnosisDAO sponsor Necromorfo’s Cryptorock Tour 2022? -body: 'The Cryptorock Tour proposal aims to execute a web3 onboarding tour in 14 different - cities in Mexico with presentations from the band [Necromorfo](https://instagram.com/necro_morfo) - supported by projects like [Rockoboy](https://www.instagram.com/rockoboyoff/), [Pajaros - Vampiro](https://www.instagram.com/pajarosvampiro/) and [The Froys](https://www.instagram.com/thefroysmx/), - as well as local bands from each city. - - - The Gnosis Chain ecosystem will provide the infrastructure for the onboardings, - using tools such as: - - * Chainlist.org - - * Tip Party (by Moonshot Collective) - - * POAP - - * Honeyswap - - * Giveth - - * Agave - - * [Suarmi](https://suarmi.com) and [Connext](https://bridge.connext.network) bridges - - - A deep insight into the planning and logistics can be found in the [Gnosis discussion - forum](https://forum.gnosis.io/t/gip-53-should-gnosisdao-sponsor-necromorfos-cryptorock-tour-2022/5314), - as well as supporting media and documents. - - - * GnosisDAO will provide **$15,000.00 xDAI** to Necromorfo, in exchange for onboardings, - live shows and brand placement in 14 cities across Mexico. - - * The tour aims to reach at least 1,200 show attendees, of which our goal is to - onboard a 10% to Gnosis Chain. - - * A follow-up with local communities in the next months after the tour will encourage - further local onboardings using Gnosis Chain. - - * The funds provided by GnosisDAO will be transparent at all moment. A detailed, - updated pre-production expense report can be found [here](https://docs.google.com/spreadsheets/d/1vea48si-0ueNRanP6YlQjOxXuXs4B4e3qydpENm0K4Q/edit?usp=sharing). - - * Necromorfo will include a feature documentary film executive-produced by GnosisDAO - around the tour in their deliveries.' -start: 1655759864 -end: 1656364664 -state: closed -author: '0xB22981bA3FE1De2325935c91a3B717168fB86714' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 106450.0558508804 -scores: - - 106193.18269779914 - - 234.1713301786316 - - 22.70182290261135 -votes: 337 -quorum: 0 -funding: - amount: 15,000.00 - currency: xDAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-54.yml b/public/GIPs/GIP-54.yml deleted file mode 100644 index 700a8bff..00000000 --- a/public/GIPs/GIP-54.yml +++ /dev/null @@ -1,134 +0,0 @@ -id: '0x911c480edc98a5aba0d07b32ae3b893721619c8fb22413daf5775f6702a319a9' -gip_number: '54' -url: https://snapshot.org/#/gnosis.eth/proposal/0x911c480edc98a5aba0d07b32ae3b893721619c8fb22413daf5775f6702a319a9 -title: Should GnosisDAO support hosting and feature updates for Blockscout Explorer? -body: 'Blockscout - - - Blockscout is an invaluable open-source tool for exploring, confirming, and inspecting - transactions on the Gnosis Chain. It supports multiple token standards, provides - a full-featured API, and offers real-time transaction tracking. - - - Blockscout has been the primary explorer for Gnosis Chain since network inception. - With the completed Gnosis/xDai merger, the responsibility to pay for hosting, maintenance, - and updates for Blockscout should shift to the GnosisDAO. - - - Project Details - - - Goal - - - The goal of this proposal is to provide continued hosting and maintenance for both - the Gnosis Chain and Optimism on Gnosis Chain Blockscout instances. - - - Project Deliverables - - - Maintain Blockscout instances for Gnosis Chain and Optimism on Gnosis Chain Network - on Blockscout’s premises - - Hosting services for the Gnosis Chain and Optimism on Gnosis Chain (for a period - of 1 year with an option to extend) - - Hosting at blockscout.com (for a period of 1 year with an option to extend) - - Premium feature set that includes Advanced smart contract verification, Watchlist, - Private address and transaction tags, Public tags, API key managements, custom ABI, - and future upcoming enhancements. - - Update Blockscout urls to remove xdai, add gnosischain - - Priority support and updates - - Support for end-users of the explorer managed via Discord - - - Execution Timeline - - - Start time - - - Blockscout hosting will no longer be subsidized as of July 17, 2022. If this proposal - passes, hosting and maintenance services will continue uninterrupted beginning on - July 18, 2022 for Gnosis Chain and Optimism on Gnosis Chain instances. If not renewed, - the hosting for the Gnosis Chain and Optimism on Gnosis Chain instances will expire - on July 18, 2022. - - - The length of the contract is for 1 year and can be renewed annually. A new proposal - will be initiated to renew the instance in June 2023. - - - Funding & Disbursement - - - Hosting costs cover high-capacity bandwidth, infrastructure upgrades, and data storage - (1900GiB and growing) for the networks. Feature enhancements and priority support - are also included as a part of the package. - - - Amount is paid up front for the year and can be renewed annually. Payment can be - made to BlockScout’s Gitcoin 0xAddress (0x242ba6d68FfEb4a098B591B32d370F973FF882B7) - with xDai, USDC, or USDT. - - - Gnosis Chain: $100,000 annually ($8,333 per month). - - Optimism on Gnosis Chain: $50,000 annually ($4,166 per month). - - Total cost: $150,000.00 due July 17, 2022 - - - Future Plans​ - - - The following features are actively in progress. - - - UI design refresh - - New modules: NFT explorer, dApp Marketplace, Blockscout RPC - - Transaction actions, protocols-specific customizations - - ENS support - - Analytics dashboard - - More developer tools - - Search enhancements - - Data sorting/filtering - - Data storage optimization - - Data indexing performance enhancements - - Deployment improvements' -start: 1656783460 -end: 1657388260 -state: closed -author: '0x7D7DcEf3bB919347F5031127799ee2679A9111A0' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 157029.3928734823 -scores: - - 157026.75145174866 - - 2.5944363978997576 - - 0.04698533577303192 -votes: 563 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-55.yml b/public/GIPs/GIP-55.yml deleted file mode 100644 index 7af9ce33..00000000 --- a/public/GIPs/GIP-55.yml +++ /dev/null @@ -1,44 +0,0 @@ -id: '0xf747a5ba90329f9ea406d2f8ba96c28ea4aef091c524a1f3e1f70ab91e8f2524' -gip_number: '55' -url: https://snapshot.org/#/gnosis.eth/proposal/0xf747a5ba90329f9ea406d2f8ba96c28ea4aef091c524a1f3e1f70ab91e8f2524 -title: Should GnosisDAO fund Dark Forest DAO for Arena game mode on Gnosis Optimism? -body: 'Dark Forest DAO (dfdao) is a team of developers and players that have been - building on top of Dark Forest, an open-source, web3 game. - - - We reached an agreement with the former xDAI team in mid-April to fund four months - of development (April - July) to build a new game mode of Dark Forest on Gnosis - Optimism. - - - The payment was in two phases: Phase 1 was the development of the new game mode. - Phase 2 is hosting competitions and stress testing Gnosis Optimism. - - - The xDAI team paid us for Phase 1, but disbanded as part of the Gnosis merger before - paying us for Phase 2. This proposal is to request payment of $159,000 from GnosisDAO - for Phase 2 of our work, due to the xDAI / Gnosis merger. - - - Please reference the GIP-55 post on the Gnosis Forum for more information.' -start: 1657734954 -end: 1658339754 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 96576.04420234423 -scores: - - 96408.28356832832 - - 160.7384050619838 - - 7.022228953889795 -votes: 757 -quorum: 0 -funding: - amount: 159,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-56.yml b/public/GIPs/GIP-56.yml deleted file mode 100644 index 67fb832c..00000000 --- a/public/GIPs/GIP-56.yml +++ /dev/null @@ -1,93 +0,0 @@ -id: gip-56-should-gnosisdao-fund-student-web3-education -gip_number: 56 -url: https://forum.gnosis.io/t/gip-56-should-gnosisdao-fund-student-web3-education -title: Should GnosisDAO fund student web3 education? -body: "## Simple Summary\n\nKairos is a platform that provides an education for students\ - \ to learn through certifications about the different aspects of the ecosystem FOR\ - \ FREE. \nThere is no free education for students in the ecosystem yet, which should\ - \ be a priority to work towards innovation and adoption.\n\nEach blockchain or protocol\ - \ provides education and ressources from three angles: the programming language\ - \ of their company, a presentation of the ecosystem and how it works, and a training\ - \ on the company’s marketing & entrepreneurship model.\n\nWe already have a student\ - \ network gathered with over 3 000 students from universities such as Cambridge,\ - \ Stanford, Dauphine and more. \nWe are always growing our network so if you are\ - \ a student interested to learn about the ecosystem please reach out to [contact@kairostudents.com](mailto:contact@kairostudents.com)\n\ - \n## Abstract\n\nIn the ecosystem, it is challenging for companies to find competent\ - \ and committed individuals to build and contribute to projects. \nThe Kairos team\ - \ has spoken with several blockchain companies who have stated that they find suitable\ - \ profiles for hire only months later, if ever. \nThis comes from the lack of democratization\ - \ of blockchain and mainly the lack of education of the new generation on the topic,\ - \ only 2% of the top universities offer courses on blockchain and they are rarely\ - \ in-depth.\n\nIn parallel, the cheapest price on the market for a student to learn\ - \ about blockchain is $4,000. This price is unacceptable for students who have to\ - \ deal with a heavy workload in addition to their studies. \nBesides, the courses\ - \ are often unorganized and focused on the general and never go into the specific.\n\ - \n## Motivation\n\nThis is where Kairos comes in, working with key players of the\ - \ ecosystem to provide a free education. \nMany investors are leaving the market\ - \ due to current condition but many students are seeing this as an opportunity to\ - \ learn and build. \nBut where do you begin with no knowledge? In this crypted\ - \ ecosystem in which everything changes quickly through constant innovation, it’s\ - \ hard to keep track. \nI have asked myself the same question 4 years ago when\ - \ no ressources existed and I have worked towards blockchain adoption and education\ - \ ever since.\n\nKairos is also an opportunity to see beyond developers education.\ - \ It is included in the three key topics but our team wanted to show that there\ - \ is more to building than code and that you don’t need a dev background to become\ - \ a key player of this ecosystem. \nTherefore, we have decided to add courses and\ - \ certifications about the ecosystem (How is Gnosis different from the other solutions?\ - \ What are the main protocols built on Gnosis and how can you use them? How does\ - \ governance operate on Gnosis) and marketing on that blockchain (Where can you\ - \ find metrics about Gnosis ? What does it say about user behaviour? What are the\ - \ leading projects and how do they operate? What is amount of $GNO stacked and what\ - \ does it say about trust in Gnosis?).\n\n## Specification\n\n * Each student\ - \ will have to verify their student status by validating an email received on their\ - \ university email account. They will then have access to a functional site containing\ - \ the courses provided by the various partner organizations. These courses will\ - \ be classified following several parameters such as their difficulty, the level\ - \ required to pass them, the subject matter (development, marketing, project management,\ - \ etc.). \nStudents will then have to register to the different programs offered\ - \ in order to follow their progress and know the attendance of each program.\n\n\ - \ * Once finished, students will have to provide **a project** proving their mastery\ - \ of the subject in order to obtain their certifications in the form of an NFT or\ - \ a document. \nThe first 50 students will receive tokens of the partners sent\ - \ by Kairos. \nThe most innovative projects will be eligible for funding and support\ - \ from Kairos and its partners, in order to provide maximum assistance and support\ - \ to the brightest minds.\n\n * Our student network is organized as a **DAO** ,\ - \ international, constantly growing and waiting for your courses and certifications.\ - \ The DAO will allow students to choose how treasury is used, which topics to prioritize\ - \ and which topics will get funding.\n\n * GnosisDAO will provide $20,000.00 xDAI\ - \ to Kairos, in exchange for making courses and certifications about Gnosis for\ - \ students.\n\n * This grant is needed to remain the spirit of Kairos being free\ - \ for students and will be used for using the current ressources to make videos,\ - \ courses and quizzes about Gnosis.\n\n * The distribution is 50% of the budget\ - \ being used for the courses and the platform, 25% of the grant to grow our student\ - \ network and communicate about the partnership, 15% to support students projects\ - \ and 10% for the team.\n\n * We will bring visibility to Gnosis and enhance their\ - \ support to education on our platform, on socials and on our student network.\n\ - \n\n\n\n## Rationale\n\nWe are students ourselves, hence the initiative of providing\ - \ a free education for students. \nWorking with Gnosis will allow student education\ - \ about the ecosystem and certified students to build on Gnosis. \nThis is a win-win\ - \ opportunity, let’s support student education and the next generation!\n\nFor more\ - \ information about Kairos : [DocSend](https://docsend.com/view/bfmi894wjunie675)\n\ - \n2 Likes\n" -start: 1656529249 -end: null -state: - - phase-2 -author: Louis -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-57.yml b/public/GIPs/GIP-57.yml deleted file mode 100644 index bcf085bc..00000000 --- a/public/GIPs/GIP-57.yml +++ /dev/null @@ -1,151 +0,0 @@ -id: '0x7575919c07e03bbe642b11938501bb6cbc542337f64763f94a00e04ed403cfba' -gip_number: '57' -url: https://snapshot.org/#/gnosis.eth/proposal/0x7575919c07e03bbe642b11938501bb6cbc542337f64763f94a00e04ed403cfba -title: Should Gnosis DAO support research of a zkSNARK-enabled light client and bridge? -body: "## Simple Summary\n\nThe current Gnosis bridge is a based on a multi-sig design.\ - \ However, multi-sig bridges have known weaknesses, particularly their reliance\ - \ on a relatively centralized set of operators--see the recent [Ronin bridge](https://cointelegraph.com/news/axie-infinity-s-ronin-bridge-hacked-for-over-600m)\ - \ and [Harmony bridge](https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/)\ - \ hacks, in which hundreds of millions of dollars of funds were stolen by attackers\ - \ who gained access to multi-sig keys. SNARK-enabled bridges--sometimes called [\"\ - trustless\" bridges](https://ethereum.org/en/bridges/)--potentially have better\ - \ security properties. We propose to build prototypes of essential infrastructure\ - \ for a potential SNARK-enabled bridge for Gnosis to Eth2 bridging.\n\n\n## Abstract\n\ - \n- Build essential infrastructure that can be used in the future to create and\ - \ productionize a SNARK-enabled bridge for Gnosis Chain / Eth2. Note that it is\ - \ **not** in the scope of this specific grant to take the bridge all the way to\ - \ production on mainnet—this work will allow us to assess the viability of a production\ - \ bridge and build out the key infrastructure. Productionization, if it happens,\ - \ would be a future project.\n- Create a foundation for Gnosis’ ZK roadmap and expertise.\n\ - \n## Motivation\nTo build the components of a SNARK-enabled bridge for Gnosis Chain,\ - \ an Eth2 compatible light client must be implemented on the EVM. Because the EVM\ - \ does not have precompiles for the BLS12-381 curve used in Eth2, implementing this\ - \ directly in Solidity would result in impractically high gas costs. As a result,\ - \ this approach to bridging was unexplored until it was made practical by recent\ - \ advances in zero-knowledge proofs.\n\nThe 0xPARC community has developed extensive\ - \ expertise in ZK-SNARKs broadly and has built several advanced ZK circuit primitives\ - \ which can now enable these types of applications. We believe that we can design\ - \ a circuit which significantly reduces the gas cost of running a light client\ - \ on EVM by moving the verification of the aggregated BLS signature and the Merkle\ - \ tree inclusion proof off-chain.\n\n## Specification\n\nBuilding this SNARK-enabled\ - \ bridge will require three important components:\n\n1) A Solidity smart contract\ - \ which implements the [Eth2 light client spec](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/sync-protocol.md).\ - \ \n2) A zkSNARK circuit that verifies the aggregated BLS signature of the [sync\ - \ committee](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md#sync-committee),\ - \ verifies the Merkle tree inclusion proofs with SSZ for serializiation, and verifies\ - \ the current sync committee from the previous block header.\n3) An operator node\ - \ implementation which can keep the light client up to date.\n\n\n## Rationale\n\ - \n### SNARK-enabled Bridge Pros & Cons\n\nPros:\n\n- Security: SNARK-enabled bridges\ - \ can be safer than centrally-operated multisig bridges. Funds cannot be unilaterally\ - \ stolen by a small set of coordinated operators or hackers by obtaining a known\ - \ set of private keys (see the $500mm [Ronin bridge hack](https://cointelegraph.com/news/axie-infinity-s-ronin-bridge-hacked-for-over-600m)\ - \ and the $100mm [Harmony bridge hack](https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/)).\ - \ Instead, the security of a SNARK-enabled bridge relies on the honesty of a larger\ - \ and regularly-shuffled sync committee as defined in the eth2 light client spec.\n\ - \nCons:\n\n- Operating expense: Our estimates suggest it will cost ~0.008 ETH per\ - \ light client header update at 40 gwei gas price as well as ~0.008 ETH per withdraw\ - \ operation on the bridge. The frequency of light client updates is up to the operator.\ - \ In the most extreme case, updating the light client every 10 minutes for a year\ - \ would cost ~420 ETH. Updating every two hours would cost ~35 ETH.\n\nAdditionally,\ - \ regardless of what cryptographic mechanisms are used, bridges cannot provide security\ - \ beyond the consensus mechanisms of the source and target chains. Even with the\ - \ efficiencies provided by zkSNARKs, such limitations will be governed by the size\ - \ of potential PoS penalties on either chain.\n\n## Implementation\n\n### Work Breakdown\n\ - \n**Timeline:** 10 weeks (July 4 - September 9) for Phase 1 and Phase 2\n\n**Phase\ - \ 1:** \n\nThe goal of Phase 1 will be to deliver prototypes of the three important\ - \ components above. In particular, we will deliver a smart contract that implements\ - \ the Eth2 light client spec with as much computation as possible moved off-chain\ - \ with a zkSNARK circuit to make gas costs feasible.\n\nThe SNARK circuit will do\ - \ three things:\n\n- verify the BLS signatures of the sync committee\n- verify the\ - \ Merkle tree inclusion proofs using SSZ for serialization used in several places\ - \ in the light client\n- verify the current sync committee from the previous block\ - \ header\n\nThe Solidity smart contract will generally implement the Eth2 light\ - \ client spec substituting out the BLS signature verification and Merkle tree inclusion\ - \ proofs with a snark verification, reducing gas costs.\n\nWe will also provide\ - \ an operator node implementation which periodically updates the light client with\ - \ the proof generated by the SNARK circuit.\n\n**Phase 2**\n\nIn Phase 2 of the\ - \ of the grant, we aim to have public-facing polished artifacts and deliverables\ - \ including the smart contracts and circuits from Phase 1. The artifacts include\ - \ the following:\n\n- public open-source repo with smart contract light client and\ - \ SNARK circuits with clear documentation\n- ZK light client deployed to testnets\ - \ (Ethereum and Gnosis Chain) with a prototype operator that generates proofs and\ - \ pings contracts with block headers every 10 minutes\n- public open-source repo\ - \ with a prototype bridge contract that calls the light client smart contract and\ - \ a prototype UI that allows for use generating inclusion proofs and bridging funds\n\ - - prototype bridge contract deployed to test nets and example of SNARK-enabled bridging\ - \ on testnets\n- public blog post explaining what we built: the technical architecture\ - \ of a SNARK-enabled bridge, high-level technical explanation of circuits and how\ - \ all the components fit together, and a precise breakdown of both security guarantees\ - \ as well as risks/limitations/failure modes of a SNARK-enabled bridge.\n- stretch:\ - \ blog post series diving deeper into technical details of each component\n\n##\ - \ Deliverables\n\n### Grant Allocation\n\nThe core team that would recieve this\ - \ grant is part of the 0xPARC organization. 0xPARC is trying out a unique, experimental\ - \ public-goods collective grant sharing proposal for this project. In particular,\ - \ the proceeds from this grant will be split **50/50** between the core team and\ - \ donations to various dependencies the project relies on (i.e. open source circuits,\ - \ public goods resources) as well as the 0xPARC community. \n\nThe reason for this\ - \ split is this project is only made possible by extensive open-source work by co-dependencies\ - \ in the 0xPARC and broader ZK communities (such as circom, made by iden3).\n\n\ - This innovative model for grant-funding and support for public goods will also be\ - \ mentioned in the blog post, as we want this project to push the narrative from\ - \ both a technical standpoint as well as a community & grant-funding standpoint.\n\ - \n**We are requesting a total of $600k (600k USDC) across two project phases: $300k\ - \ will go to the team and $300k will go to the broader ZK community and public goods\ - \ (distribution determined by core team).** We expect that the project will take\ - \ around 30 engineering weeks for the core team, in addition to supporting work\ - \ from various dependencies and public goods that make this project possible. As\ - \ described above, half of the grant will be distributed by the core team to the\ - \ broader ZK community and various co-dependencies (which may include prior work\ - \ by team members, as well as future ZK projects that opt into 50/50). Note that\ - \ the core team, not GnosisDAO, will be deciding on the distribution of the $300k\ - \ set aside for broader ZK community and public good contributions.\n\n**Phase 1:\ - \ $120K for Team + $180K Public Goods/0xPARC ZK Ecosystem**\n\nThe funding for this\ - \ phase will be paid out in advance of work starting on Phase 1. The deliverables\ - \ for this phase include the following:\n\n- [ ] ZK circuit template for BLS signature\ - \ aggregation and verification\n- [ ] ZK circuit template for SSZ Merkle tree inclusion\ - \ proofs\n- [ ] ZK circuit for verifying the sync committee form the previous block\ - \ header\n- [ ] Solidity smart contract for running the light client according to\ - \ the Eth2 spec on EVM\n- [ ] an operator node implementation which periodically\ - \ submits new headers and proofs of the ZK circuit to the light client\n\n**Phase\ - \ 2: $180K for Team + $120K Public Goods/0xPARC ZK Ecosystem**\n\nThe funding for\ - \ this phase will be paid out after the completion of Phase 1 (as judged by Stefan\ - \ and Martin of Gnosis) and before starting of Phase 2. The deliverables of this\ - \ phase include the following: \n\n- [ ] extensive documentation of all circuits,\ - \ contracts, and code\n- [ ] ZK light client deployed to test nets on Ethereum and\ - \ Gnosis Chain with a prototype operator that generates proofs and pings contracts\ - \ with block headers periodically\n- [ ] prototype bridge contract + UI that can\ - \ bridge assets from Gnosis Chain to Ethereum\n- [ ] blog post explaining what we\ - \ built ranging from the technical architecture of a SNARK-enabled bridge and how\ - \ all the components fit together\n\nThe address of the SAFE to provide funds to\ - \ is: 0xFeB39382FCBE6035e0bE2263Ba474390AB926eE4\nhttps://gnosis-safe.io/app/eth:0xFeB39382FCBE6035e0bE2263Ba474390AB926eE4/home\n\ - \n## Team\n\n\n- Uma Roy\n - Summer resident at 0xPARC. Co-author of ZK-identity\ - \ apps [zkmessage.xyz](http://zkmessage.xyz) and [cabal.xyz](http://cabal.xyz).\ - \ Co-author of circom-batch-ecdsa.\n- John Guibas\n - Summer resident at 0xPARC.\ - \ Co-author of circom-batch-ecdsa and has experience building smart contracts for\ - \ DeFi and infrastructure for blockchain analytics.\n- Jonathan Wang\n - 0xPARC\ - \ grantee and co-author of circom-pairing. Number theory post-doc and elliptic curve\ - \ math specialist.\n\nAdditional 0xPARC community members will be helping out with\ - \ implementation. This includes individuals that helped implement many of the most\ - \ advanced circuit primitives in groth16, including co-authoring of circom-bigint,\ - \ circom-ecdsa, and circom-pairing.\n" -start: 1657075047 -end: 1657679847 -state: closed -author: '0xd60D3ff36e52cFD04B9f29e10D5A43f9FaB1F256' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 205784.74910019594 -scores: - - 205548.46288814992 - - 0.003658774799350572 - - 236.28255327122884 -votes: 550 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-58.yml b/public/GIPs/GIP-58.yml deleted file mode 100644 index 8ea95fc5..00000000 --- a/public/GIPs/GIP-58.yml +++ /dev/null @@ -1,46 +0,0 @@ -id: '0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8' -gip_number: '58' -url: https://snapshot.org/#/gnosis.eth/proposal/0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8 -title: Karpatkey DAO Service Extension -body: 'Should GnosisDAO implement GIP-58, as detailed in the following forum post?: - https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417 - - - - After the GIP-20 6 approval, the development and sustainable growth of the Gnosis - Chain became a top priority for GnosisDAO. Even though efficient treasury management - is still a must for GnosisDAO’s evolution, the scope of our work has to encompass - more in order to take the Gnosis Chain to the next level, co-creating a safe, trustworthy - ecosystem. - - - We increased our headcount and went beyond the scope of GIP-20 to be able to adequately - cater to Gnosis’ current needs. - - - This proposal focuses on the Gnosis Chain and treasury development, seeking to reduce - risk exposure, develop anti-liquidation bots to increase capital efficiency, update - our security protocol, run security audits, further improve our reporting, execute - and manage a sustainable rewards plan for new and existing protocols in the GC, - and scout attractive new ones to make them part of the GC.' -start: 1657726231 -end: 1658331031 -state: closed -author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 84311.0738698482 -scores: - - 79977.2606628623 - - 4312.6163162912835 - - 21.196890694632515 -votes: 718 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-59.yml b/public/GIPs/GIP-59.yml deleted file mode 100644 index 0119d026..00000000 --- a/public/GIPs/GIP-59.yml +++ /dev/null @@ -1,180 +0,0 @@ -id: gip-59-should-gnosisdao-fund-circles-ubi-r-d-work -gip_number: 59 -url: https://forum.gnosis.io/t/gip-59-should-gnosisdao-fund-circles-ubi-r-d-work -title: Should GnosisDAO fund Circles UBI R&D work? -body: "### Simple Summary\n\nThis proposal would fund the [Circles Coop eG](http://circles.coop)\ - \ and the[ Bitsposessed](https://join.bitspossessed.org/) developer collective to\ - \ support the CirclesUBI team’s R&D costs for one and a half years and expand operations.\ - \ The following Circles UBI proposal would foster the mass adoption of key Gnosis\ - \ technologies like the Gnosis Safe via the establishment of UBI Open Pilots as\ - \ well as fostering internal collaboration between GnosisChain dapps through the\ - \ development of a Circles Web of Trust (WoT) GnosisSafe native app and other tools\ - \ at a total of USD - $3.571 Million, paid 45% in GNO and 55% in DAI, administered\ - \ by the Circles Coop eG.\n\n### Abstract\n\nWith over 120,000 accounts deployed\ - \ so far via the circles.garden interface, [CirclesUBI](http://joincircles.net)\ - \ has established itself as a power dapp within GnosisChain, developing, maintaining\ - \ and promoting basic income public good infrastructures built within programmable\ - \ accounts via Gnosis Safe technology. The present proposal seeks funding for the\ - \ team’s operations plus a UBI Open pilot funding program for 1.5 years, and includes\ - \ a detailed budget on how the team plans to allocate the requested funds of USD\ - \ - $ 3.571 Million equivalent. Through funding the present proposal, GnosisDAO\ - \ would establish clear alignment with its core values of funding public goods and\ - \ support the development and improvement of infrastructure critical to ensuring\ - \ the sustainable scalability of the GnosisDAO and GnosisChain ecosystem.\n\nSee\ - \ Phase 1 [here](https://forum.gnosis.io/t/should-gnosisdao-fund-circles-ubi-r-d-work-a-web-of-trust-dapp-for-gnosis-safe-ubi-as-public-goods/4936).\n\ - \n### Motivation\n\nCirclesUBI is a basic income system for communities built on\ - \ the GnosisChain. CirclesUBI was coined first by Martin Koeppelmann during the\ - \ early days of Ethereum, merging ancient traditions of mutual credit with the idea\ - \ of Unconditional Basic Income (UBI) into [a system of personal currencies](https://handbook.joincircles.net/docs/developers/whitepaper/).\ - \ Since CirclesUBI launched in Berlin in October 2020 it has gained significant\ - \ attention from individuals and communities world-wide, with over 120,000 successfully\ - \ deployed GnosisSafes to date. Beyond the ongoing [Berlin Open Pilot](https://joincircles.net/business/)\ - \ and the communities who use Circles around the world, there are new instances\ - \ of the application being developed around the world, including a campaign by Expedition\ - \ Grundeinkommen in Berlin that started from May 2022 (circles.pink). This proposal\ - \ will support the development of a world-wide Circles Movement DAO to serve these\ - \ as well as other emerging communities.\n\nTo ensure our mission to make Circles\ - \ a planetary movement towards bringing UBI into the world, the Circles Coop and\ - \ the Bitspossessed collective have successfully relaunched Circles in order to\ - \ have an issuance rate based on time so that communities world-wide can more easily\ - \ anchor Circles to their own Units of Account and start exchanging using CRC. You\ - \ can read more about the recent transition and its benefits [here](https://circlesubi.medium.com/the-revaluation-of-the-circles-system-c6eea70e767d?source=user_profile---------2----------------------------).\n\ - \nWith the goal to further increase uptake, Circles Coop and Bitspossessed are now\ - \ focused on creating a resilient payments infrastructure without single points\ - \ of failure (SPOFs). Based on the online [Circles Market](http://market.joincircles.net),\ - \ the team is currently designing the specification to develop an OpenAPI so that\ - \ people across the planet can use their existing preferred payment methods to co-pay\ - \ with their CRC currency.\n\nAfter the successful [merge of XDAI/Gnosis](https://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904),\ - \ we believe it’s time to deliver on the promises of “developing the Gnosis Chain\ - \ ecosystem and incentivize usage”. In order to have a more resilient and interdependent\ - \ ecosystem, the CirclesUBI team wants to bring mutual benefit to the different\ - \ dapps within GnosisChain via the development of a [Circles Web of Trust ](https://protocol.bgnm.de/essays/sarah-friend/)(WoT)\ - \ dapp within GnosisSafe. A native WoT GnosisSafe app would provide pathways for\ - \ interoperability and integration between dapps, DAOs, GnosisChain POS validators,\ - \ other WoT networks like [Proof of Humanity](https://www.proofofhumanity.id/),\ - \ [BrightID](https://www.brightid.org/) and more, embedding trusted relationships\ - \ and token systems within a modular and integrative WoT for GnosisChain.\n\nCircles\ - \ UBI Coop approaches its mid-term development through establishing revenue-generating\ - \ income sources to cover cost of production and re-invest the overflow into R&D.\ - \ The CirclesUBI team will develop a Community Currency Exchange, a social DEX that\ - \ promotes community finance (Co-Fi) via CRC group currencies and other alt-coins\ - \ like our sister project [Trustlines](https://trustlines.network/) (recently [decided](https://snapshot.org/#/gnosis.eth/proposal/0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1)\ - \ to move to GnosisChain), where SMEs and COOPs and municipalities can issue their\ - \ own community currencies and sell it for digital assets and DAI stablecoin in\ - \ return for future promises to their own production, creating healthier relationships\ - \ between investors within the Gnosis ecosystem and community/business members in\ - \ the Circles network, new DAO structures and more. The Gnosis ecosystem can further\ - \ benefit from the uptake of GnosisSafe infrastructure via CirclesUBI to non-crypto\ - \ natives, with over 120,000 safes deployed as of mid-2022 on Gnosis Chain (source:\ - \ [Dune Analytics](https://dune.com/tschubotz/Gnosis-Chain-Gnosis-Safe-Circles)).\n\ - \nIn short, the Circles Coop & the Bitspossessed have assembled an extremely well\ - \ positioned team to stress-test, develop, maintain and expand underlying Gnosis\ - \ core infrastructure and drive Gnosis technologies to mass adoption via the implementation\ - \ of UBI on a planetary scale, which we believe to be a paradigm shift in how society\ - \ is organised. Gnosis currently provides the backbone infrastructure for this transition\ - \ to take place and our mission is to improve it through everyday usage with a wide\ - \ range of people.\n\n### Specification\n\nThe Circles Coop and the Bitspossessed\ - \ collective seek to increase the size of the teams to a total of 24 full-time positions,\ - \ which will be employed over the course of 12 - 18 months, in order to develop,\ - \ maintain and expand the described tools. Furthermore, the proposal includes funding\ - \ for a Circles international ambassador position leading the community work within\ - \ the Circles Movement DAO and transferring the Circles Coop’s Berlin pilot learnings,\ - \ best-practices and research tools to better implement other Circles hubs around\ - \ the world.\n\nThe total budget requested for the CirclesUBI team (USD - $ 1.948\ - \ Million in DAI, 55 %) and to equip the Circles Movement DAO via the development\ - \ of Open UBI Pilots (USD - $ 1.5 Million in GNO, 45 %) is USD - $ 3.571 Million.\ - \ The full budget details of the present CirclesUBI proposal can be found [here](https://docs.google.com/spreadsheets/d/1ORy9d2pw7IJoub05s5MuVLBD3kRyUqpQmJnMG1KhdR4/edit#gid=156254642).\n\ - \n### Rationale\n\nThe [CirclesUBI technical roadmap](https://nubo.bitspossessed.org/s/jYMDYoA6ecZNFXw)\ - \ is public and was created by the [Bitspossessed](https://join.bitspossessed.org/),\ - \ the team that maintains and develops the CirclesUBI core codebase. Its chief priorities\ - \ for 2022 include improvements to the pathfinder algorithm, including hardening\ - \ transfer through transactions to improve the overall functionality and usability\ - \ of the Circles network, as well as developing a Circles Payment API & co-payment\ - \ functionality. For Q4 2022 and 2023, priorities lay on developing a general purpose\ - \ GnosisSafe Web of Trust (WoT) native app and tooling based on the Circles WoT\ - \ to encourage more on-chain collaboration and a Community Currency DEX. All of\ - \ this is to ensure that the already existing living communities using Circles can\ - \ have a better user-experience. In terms of promises to the GnosisDAO, we divide\ - \ these into two:\n\n#### 1\\. Development of Gnosis Infrastructure & Public Goods:\n\ - \n * Development of a GnosisSafe Web of Trust (WoT) native dapp & modular tooling\ - \ for the GnosisChain ecosystem: The Circles WoT provides a network of trusted peers\ - \ which can be used by different projects building on GnosisChain so that other\ - \ dapps can build on top of it using their own token network or connecting it with\ - \ other WoT networks (e.g. BrightID, Proof of Humanity, etc) and established more\ - \ aligned strategic pathways for collaboration. R&D will take place in the following\ - \ areas:\n\n * Robust network reputation system for staking on GnosisChain via\ - \ the future Gnosis WoT & R&D on scaling GnosisChain through the Circles WoT and\ - \ projects like Dappnode.\n * Trust relations between and within DAOs using GnosisSafes.\n\ - \ * Modular collaboration and integration between dapps in the GnosisChain ecosystem.\ - \ Think Proof of Humanity, Trustlines, BrightID, Circles and many more!\n * Embed\ - \ real time economic trade data onto the blockchain to support the development of\ - \ more transparent, sustainable and trusted supply chains via the UBI pilots research.\n\ - \ * Pathfinder algorithm R&D - useful for other projects with native tokens to\ - \ do their own transactions using an integrated WoT dapp.\n * Modular extensibility\ - \ of the transfer through methods.\n * More non-market driven transactions, such\ - \ as recent Proof of Active Participation (POAP) efforts. * R&D into a future $WOT\ - \ token for the Web of Trust dapp for GNO token holders, similar to the $SAFE token\ - \ proposal.\n * CirclesUBI Open Pilots: Leveraging Gnosis technology, the CirclesUBI\ - \ Open Pilots provide a strategic framework to go from basic income pilots to basic\ - \ income policy and basic income systems around the planet. The Circles Coop is\ - \ currently expanding the Berlin Open Pilot and plan to spread CirclesUBI more formally\ - \ into other regions as part of a Circles Movement, planning to expand the support\ - \ for open pilots by the end of 2023, where the [joincircles.net](http://joincircles.net)\ - \ will become a neutral platform for all projects using Circles and other wallet\ - \ instances, such as circles.pink (Expedition Grundeinkommen). The Circles Movement\ - \ DAO will work as a governance mechanism to allocate funds accordingly for the\ - \ implementation of these pilots to the communities that want to implement Circles\ - \ locally in a transparent way. Our go-to-market strategy is working with the B2B\ - \ sectors to increase productive capacity, develop infrastructure and go to key\ - \ stakeholders, such as established communities already using CRC, local municipalities\ - \ and regional governments interested in implementing basic income, in order to\ - \ create more ecological and transparent value chains. UBI is one of the main pillars\ - \ for the 21st century economy and a social ecologically just transition, especially\ - \ given the current context of supply chain disruptions and rising inflation. We\ - \ strongly believe GnosisChain and Gnosis technologies more generally provide a\ - \ strategic backbone for this transition to take place.\n\n * Circles Payment API:\ - \ In order to have a scalable system and reach millions of people, we are focusing\ - \ on creating an open source payment API so that Circles can be used in a plug and\ - \ play basis, allowing people to co-pay with their UBI using existing payment infrastructures\ - \ and habits, such as debit cards, marketplaces and other payment applications.\n\ - \n\n\n\n#### 2, Fulfilling the Promise of Investment Opportunities to GNO holders\n\ - \n * Community Currency DEX: Based on Circles group currencies (currently being\ - \ developed by third party teams), a social DEX will create incentives for GNO holders\ - \ via investment opportunities in strategic future tokens emerging from the development\ - \ and deployment of the platform, as well as ROI from overflow investments in SMEs\ - \ and COOPs who sell their tokens to the communities that support them, liquidity-pool\ - \ provider incentives and more. To achieve this, we are exploring collaboration\ - \ with MakerDAO for integrations and researching deployment of e.g. the Juicebox\ - \ protocol on the GnosisChain. We are open for suggestions and potential synergies\ - \ to collaborate with existing DEX infrastructures (e.g. Honeyswap, 1hive, Uniswap,\ - \ Cowswap) within GnosisChain to design a specific-purpose social DEX that is directed\ - \ at the real economy.\n * Indirect benefits for GNO holders: Due to further increasing\ - \ uptake of GnosisSafes and transactions being incentivized by Circles communities,\ - \ the revenue model of GnosisChain (e.g. transaction fees, staking rewards, etc.)\ - \ will in turn benefit all GNO token holders and those participating in the maintenance\ - \ and improvement of Gnosis Chain. We also expect benefits coming from Web of Trust\ - \ R&D.\n\n\n\nAll funds not spent will be at Circles Coop e.G. discretion.\n\nUnconditionally,\n\ - \nJulio Linares, \non behalf of the Circles UBI Coop & Bitspossessed Collective\n\ - \n14 Likes\n\n**[next page →](/t/gip-59-should-gnosisdao-fund-circles-ubi-r-d-work/5475?page=2)**\n" -start: 1657483876 -end: null -state: - - phase-2 -author: null -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 3.571 Million - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-6.yml b/public/GIPs/GIP-6.yml deleted file mode 100644 index 599f9c11..00000000 --- a/public/GIPs/GIP-6.yml +++ /dev/null @@ -1,104 +0,0 @@ -id: gip-6-deploy-gnosis-auction -gip_number: 6 -url: https://forum.gnosis.io/t/gip-6-deploy-gnosis-auction -title: Deploy Gnosis Auction -body: "## Update (19/02/2021)\n\nAccording to [GnosisDAO’s governance process](https://forum.gnosis.io/t/readme-gnosisdao-governance-process/736)\ - \ I promote this proposal to the consensus phase (Phase 3). \nVoting is available\ - \ [here](https://snapshot.page/#/gnosis/proposal/QmUA5aYzD7nRdPQhqMTH3GWus4Bj62SGcSfjPEb6QcDdnM)\ - \ \nA link to the audit report for Gnosis Auction smart contracts was added to\ - \ the Implementation section of this proposal.\n\n## Simple Summary\n\nThis GIP\ - \ intends to answer the question: Should GnosisDAO deploy GnosisAuction?\n\n## \ - \ Abstract\n\nThis is the phase-II continuation to [Should GnosisDAO build an IDO\ - \ specific Dapp?](https://forum.gnosis.io/t/should-gnosisdao-build-an-ido-specific-dapp/895)\n\ - \nGnosisAuction would build on the proven success with token sales that Gnosis Protocol\ - \ (GP) v1 (Mesa) had. It will provide a sturdy mechanism that supports fair price\ - \ finding in token sales. It will also aim to be modular enough to work in other\ - \ scenarios where auctions are needed.\n\n## Motivation\n\nGnosis Protocol v1 was\ - \ successful with multiple token sales, including some high profile ones such as\ - \ mStable and API3. Nonetheless, the protocol was not developed with this specific\ - \ use-case in mind. Additionally, after hitting the market, many users suggested\ - \ multiple improvements.\n\nSome of the suggested improvements included:\n\n *\ - \ Making the UX more simple\n * Reducing the number of transactions required to\ - \ trade\n * Improve gas efficiency\n * Reduce attack vectors\n\n\n\nThough these\ - \ improvements are being addressed in the development of Gnosis Protocol v2 (GPv2),\ - \ it still plans to be a DEX that is not aimed at token sales and other kinds of\ - \ auctions. Thus, it is important to address this segment of the market that has\ - \ proven demand.\n\nGnosisAuction still takes some of the most important benefits\ - \ from GPv1, out of which the following two stand out:\n\n * Single closing price\ - \ per auction, which is the fairest price-finding mechanism\n * MEV resistance,\ - \ which prevents miners and frontrunners from extracting value\n\n\n\nFinally, it\ - \ is important to note that there is no general auction smart contract ready to\ - \ use in the market. Some of the use-cases that the contract could also be used\ - \ for include:\n\n * Auctions to repay debt on shortfall events of lending protocols\ - \ like AAVE\n * Liquidations\n * Token buy backs\n * Price discovery for all\ - \ sorts of assets\n\n\n\n## Specification\n\nGnosisAuction may be used as a tool\ - \ by anyone hoping to auction off a predefined amount of tokens. Anyone can bid\ - \ to buy these tokens by placing a buy-order with a specified limit price during\ - \ the whole bidding time, subject to any potential customisations/restrictions placed\ - \ by the auctioneer. At the end of the predefined auction time, the final price\ - \ is calculated by the following method: The buy volumes from the highest bids are\ - \ getting added up until this sum reaches the initial sell volume. The limit price\ - \ of the bid that increases the overall buy volume to the initial sell volume is\ - \ setting the uniform clearing price. All bids with a higher price will be settled\ - \ and traded against the initial sell volume with the clearing price. All bids with\ - \ a lower price will not be considered for the settlement and users will be able\ - \ to withdraw their committed funds.\n\nGnosis auction will initially have a simple\ - \ UI so buyers can place their bids. A draft of the interface can be seen below,\ - \ which will aim to use the gnosis-auction.eth domain.\n\n[![](//forum.gnosis.io/uploads/default/optimized/1X/01ff03ffac18dc194e0aa4a8cfc46f387fa30daa_2_438x325.png)\ - \ 1596×1184 127 KB ](//forum.gnosis.io/uploads/default/original/1X/01ff03ffac18dc194e0aa4a8cfc46f387fa30daa.png)\n\ - \nAt first, auctioneers (sellers) will have to interact directly with the code in\ - \ order to run an auction. Nonetheless, simple, yet comprehensive documentation\ - \ will be written to make this easy for sellers to set up. Subject to legal considerations,\ - \ eventually an auctioneer interface may be built.\n\n## Rationale\n\nAs stated\ - \ above, GnosisAuction is a software tool to cater primarily to those hoping to\ - \ conduct IDOs, which are currently an underserved market. GPv1 was not aimed at\ - \ fulfilling this market, and GPv2 is geared towards being a DEX-aggregator/general\ - \ purpose DEX.\n\nRegarding other models considered, batch auctions were preferred\ - \ over Dutch Auctions mainly because:\n\n * Dutch Auctions have high activity near\ - \ the end, high gas prices or other infrastructure issues could be fatal on a critical\ - \ event as a token sale or shortfall event\n * DutchAuctions calculate their price\ - \ based on blocktime, which makes it hard to predict\n * Dutch Auctions cause a\ - \ gas war near the end of the auction, causing competition based on gas bidding\ - \ instead of the limit price set buy buyers of the auction\n * On Dutch Auctions,\ - \ bidders need to wait until the auction price reaches the maximum amount that they\ - \ are willing to pay, or else they risk paying more than they wanted. With this\ - \ implementation, users can set their limit price (maximum amount they are willing\ - \ to pay) from the start, and never pay more than what they determine.\n\n\n\n##\ - \ Implementation\n\nThe specific information on the contract can be followed up\ - \ in [this repository](https://github.com/gnosis/ido-contracts). \nThe audit report\ - \ can be found [here](https://github.com/gnosis/ido-contracts/blob/main/audit-report.md)\n\ - \n4 Likes\n" -start: 1613053983 -end: null -state: - - closed -author: 'auction_master - - status: Phase 3 - - type: Meta - - created: 2021-02-11 - - - - Update (19/02/2021) - - According to GnosisDAO’s governance process I promote thi…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-60.yml b/public/GIPs/GIP-60.yml deleted file mode 100644 index 49dc91b8..00000000 --- a/public/GIPs/GIP-60.yml +++ /dev/null @@ -1,70 +0,0 @@ -id: '0xa8adcb035b23a8e3f301ecfc2e87571279691fc28b0661c186ac380e08182b5b' -gip_number: '60' -url: https://snapshot.org/#/gnosis.eth/proposal/0xa8adcb035b23a8e3f301ecfc2e87571279691fc28b0661c186ac380e08182b5b -title: Should Gnosis pilot a DAOcast? -body: "# [Gnosis DAOcast](https://docs.google.com/presentation/d/e/2PACX-1vR2xKzpdKsLaua3ShSSERnAu3a9xqd19oAsl-mGUrn5vDUFah0LNx9kjpeAtaKOZTj0D60Bj-uI8Z2E/pub?start=false&loop=false&delayms=5000)\n\ - ## Proposal Summary\nPilot a weekly live broadcast to communicate the latest developments\ - \ in the Gnosis DAO ecosystem, and provide a new way to grow the community through\ - \ education and fun. \n\n## Background & Motivation\nAll public-facing DAO activities\ - \ and decisions (community calls, AMA’s, forum discussions, snapshot votes, etc.)\ - \ can be harnessed to generate content that amplifies the work of the community,\ - \ and establish a unique narrative. Gnosis DAO is a dynamic project with respected\ - \ status in the industry; a live broadcast designed to cover its activities would\ - \ serve as a marketing resource, increase community engagement, and add a new layer\ - \ of communications transparency.\n\n## Specification \n\nDAOcast Format\n\n* **Episode\ - \ length**: ~1 hour\n\n* **Frequency**: Bi-weekly\n\n* **Pilot Duration:** 16 weeks\ - \ (8 total episodes)\n\n* **Logistics**: Show hosted on Twitter Spaces + audio combined\ - \ with visual overlays via OBS to be run live on YouTube. This format can enable\ - \ Gnosis DAO to grow its audience on two of the most important social media platforms\ - \ in the industry simultaneously. \n\n* **Content options:** We have a variety\ - \ of content ideas for the pilot; there is a lot of room for creativity and we are\ - \ open to suggestions. After feedback from the Gnosis team, we will focus primarily\ - \ on content that helps to highlight the Gnosis Chain ecosystem, while also helping\ - \ to communicate wider developments in the DAO. \n\n* **Post-Show Highlights:**\ - \ Following each program, we will cut at least two (2) highlights from the broadcast.\ - \ At least one (1) of these cuts will be 2m 20s or under for use as twitter native\ - \ video; both cuts will be posted independently on YouTube to create a consistent\ - \ posting cadence required to gain traction with the algorithm.\n\n* **Aesthetic\ - \ Design:** All visuals used on YouTube will be aligned with the branding expectations\ - \ of Gnosis DAO.\n\n## How will we measure success?\nIn order to achieve success,\ - \ alignment with existing Gnosis DAO marketing / communications goals is required.\ - \ Should this initiative take flight, we hope to work closely with relevant teams\ - \ to ensure we are rowing in the same direction. We propose three KPI categories\ - \ for evaluating the pilot ([view table](https://docs.google.com/spreadsheets/d/1uqSBzjHZon8GMZdGUOpqIePNlrsGp8G4VWPHsFghrQA/edit?usp=sharing)),\ - \ and will log data after each show. \n\n\n\n## Why our team?\n\nWe have excellent\ - \ knowledge of the web3 space, context on Gnosis DAO, and the logistical and technical\ - \ expertise required to research, plan, and execute consistent content creation.\ - \ \n\nRelevant work samples with Gnosis Chain:\nPost-produced content\n* [Gnosis\ - \ Chain Defi Ecosystem](https://www.youtube.com/watch?v=yPYYKz0u9K0)\n* [Gnosis\ - \ Chain DAO Tooling + Infrastructure](https://www.youtube.com/watch?v=uAw1paJKcqc)\n\ - \nInterview-style GC Show [live stream + highlights]\n* [GC Show - QiDAO](https://youtu.be/XsP9icavQ44)\ - \ + Highlight [A](https://youtu.be/sMOg2AKGtgA) , [B](https://youtu.be/tXjOd_I6_g8)\n\ - * [GC Show - Twitter Thread w/ XP Network](https://twitter.com/gnosischain/status/1537717038860443648?s=20&t=P0pgmjg5kgREZh3jOxWDDQ)\n\ - \nTeam Members\n\n* @twells - project manager\n* @itsyaboi - video magic\n* @Sapote\ - \ - audio magic\n\n## How much will it cost?\n**Tokens Requested:** 4,000 xDai/USDC\ - \ + ~7.5 GNO (at current market price)\n**Recipient Address::** 0x9638530aA558c81253625d42f3018BC1544D9Dd3\n\ - **Network:** Gnosis Chain\n**Requested Payment Date:** Monthly payment is preferred\ - \ (4 month pilot).\n\n## Conclusion\nWe've had a great experience working with members\ - \ of the Gnosis Chain team, and are enthusiastic about contributing to the larger\ - \ DAO through this new media initiative. Your vote and feedback are greatly appreciated!\n" -start: 1660065149 -end: 1660669949 -state: closed -author: '0x9638530aA558c81253625d42f3018BC1544D9Dd3' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 77049.07591327732 -scores: - - 77038.55151502932 - - 3.422032515669759 - - 7.1023657323537295 -votes: 406 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-61.yml b/public/GIPs/GIP-61.yml deleted file mode 100644 index 9fb29b23..00000000 --- a/public/GIPs/GIP-61.yml +++ /dev/null @@ -1,201 +0,0 @@ -id: '0x70c0fa32438a38508fa4e011422e8955fad41fc246d569772faaedf9cfbfa876' -gip_number: '61' -url: https://snapshot.org/#/gnosis.eth/proposal/0x70c0fa32438a38508fa4e011422e8955fad41fc246d569772faaedf9cfbfa876 -title: Shall GnosisDAO fund BootNode as a Core Contributor Team? -body: "## Simple Summary\n\nBootNode proposes to contribute engineering and development\ - \ services to the Gnosis DAO ecosystem by building a hands-on autonomous team with\ - \ relevant experience in multiple disciplines that will focus on growing the GC\ - \ ecosystem adoption, starting with the following priorities:\n\n* Further strengthening\ - \ and decentralizing the DAO development by incorporating an additional specialized\ - \ Contributor Team working towards a shared goal.\n* Bridges operation: product\ - \ discovery, development, coordination, and engineering to count with an up-to-date\ - \ and sustainable Bridges operation: present infrastructure and future initiatives.\n\ - * Circles: build the required infrastructure so many teams ideally can bring a wave\ - \ of new users to the gnosis chain.\n* Gnosis Chain decentralization and security:\ - \ running chain, beacon chain, and bridges nodes.\n* Other initiatives the DAO might\ - \ need.\n\nThe team will commit long-term by starting with a 6-month engagement.\n\ - \n## Motivation\n\nSince the early days, many BootNode (BN) team members have contributed\ - \ to the Gnosis ecosystem by being exposed to different projects:\n\n* POA Network:\ - \ creating the required infrastructure used later to build xDAI.\n* Gnosis Chain\ - \ (formerly xDAI): from bootstrapping the network and being core contributors to\ - \ different bridges and dApps, to educating, onboarding new projects, and consulting.\n\ - * Core contributors to the Circles infrastructure.\n* Core contributors to the Gnosis\ - \ Safe (BN became a Safe Guardian) and other projects such as Auctions, COW Protocol,\ - \ Omen, and dxDAO.\n\nWe believe that the Gnosis DAO will benefit from the value\ - \ BootNode can add due to its outstanding team and relevant experience. BootNode\ - \ accelerates the building and growth of protocols, dApps, and networks through\ - \ engineering, development, and governance.\n\nWe are confident we can work productively\ - \ alongside the Gnosis DAO on different projects. We will push growth forward of\ - \ the Circles, the Gnosis Chain, and other initiatives.\n\nAt BootNode, we share\ - \ a vision to build a decentralized organization and network with a decentralized\ - \ ecosystem of contributors. We strongly believe in a positive sum game for Gnosis\ - \ DAO, where many protocol developers, web2 and web3 builders, infrastructure participants,\ - \ researchers, and community members can work together.\n\n## Specification\n\n\ - The following items are the initial areas of contribution. However, they might change\ - \ if they are no longer needed or if there are other initiatives where BootNode\ - \ can provide higher value.\n\n### 1: Bridges\n\nThe team will work closely with\ - \ all the involved parties to maintain and improve the bridge solutions that empower\ - \ the Gnosis Chain (the native bridges [OmniBridge](https://omni.gnosischain.com/bridge)\ - \ and [xDAI Bridge](https://bridge.gnosischain.com/) as well as other solutions\ - \ such as [Connext Bridge](https://bridge.connext.network/) and [Hop Exchange](https://hopapp.exchange/)).\ - \ Also, it will work on a new bridge that will consolidate existing options in one\ - \ place. Last but not lease, we will contribute to the research and development\ - \ of the trustless bridge already in progress.\n\nMilestones can change once the\ - \ revised roadmap is discovered and created.\n\nMilestone #0\n\n* Goal: create a\ - \ comprehensive roadmap and kick-off onboarding\n* Tasks\n * Refine scope of work\ - \ and iterate over a roadmap\n * Define communication processes (roles, channels,\ - \ etc.)\n * Defile roles, assign responsibilities and allocate resources and team.\n\ - \ * Define specific milestones, timelines, and deliverables.\n* Deliverables\n\ - \ * A detailed roadmap with milestones, timelines, and action items.\n * A document\ - \ that defines the processes, workflows, and methodologies.\n* Outcomes\n * Stakeholders\ - \ agree on the roadmap.\n * The team has a refined execution plan.\n * A team\ - \ with the required skills is allocated to deliver the results according to the\ - \ roadmap.\n * Kick-off date for starting executing the roadmap.\n\nMilestone #1\n\ - \n* Goal: Maintenance and operational management\n* Tasks\n * Improve financial\ - \ operations of the bridges.\n * Native Bridges (Omni + xDAI).\n * Non-native\ - \ bridges (Connext + Hop).\n * Identify liquidity management needs on other bridging\ - \ solutions such as Hop and Connext.\n * Develop monitoring tools and dashboards\ - \ to measure financial performance easily. (this one can be used as a starting point:\ - \ https://dune.com/maxaleks/Compounding-in-xDai-bridges )\n * Improve observability\ - \ and monitoring of the bridge's infrastructure.\n * Live Monitoring application\ - \ that shows transaction status for each validator and can monitor transactions\ - \ in both directions. (this can be used as a starting point: https://docs.tokenbridge.net/about-tokenbridge/components/amb-live-monitoring-application\ - \ )\n * Increase decentralization and scalability of both native and non-native\ - \ bridges.\n * Identify routers’ and validators’ maintenance needs.\n * Communicate\ - \ and coordinate with involved stakeholders.\n * Identify and document technical\ - \ debt.\n * Identify governance issues if any and create a plan to solve them.\n\ - * Deliverables\n * Documented process of bridge operations.\n * Control dashboard\ - \ for measuring bridge's financial performance.\n * Documented architecture of\ - \ infrastructure, pipelines, and technical workflows.\n * Reporting about bridge\ - \ usage, costs, and revenues associated with bridges.\n * Communicate additional\ - \ capabilities of Omnibridge to developers.\n * List of financial KPI to keep track\ - \ of.\n * P&L reporting.\n* Outcomes\n * Better financial control, visibility,\ - \ and transparency of bridge operations.\n * Operation improvements reduce manual\ - \ and reactive work that leads to slow, unproductive, and error-prone issues.\n\n\ - Milestone #2\n\n* Goal: Consolidate Omni + xDAI UIs\n* Tasks\n * Create UX wireframes\ - \ for a consolidated UI.\n * Create the front-end and UIs.\n * If needed, refactor\ - \ Omni bridges and xDAI bridge backends and infrastructure to easily make the UI\ - \ merge.\n* Deliverables\n * A repository with the new consolidated UI.\n * New\ - \ UI is deployed.\n* Outcomes\n * UX is improved, aiming for fewer dropouts.\n\ - \ * Facilitate bridging operations into Gnosis Chain by a fairly simple process.\n\ - \nMilestone #3\n\n* Goal: Security assessment plan and evaluation of bridges operation\ - \ and infrastructure.\n* Tasks\n * Evaluate the current security (web2 and web3).\n\ - \ * Define a security plan and action items to improve the security of the bridges.\n\ - * Deliverables\n * A document that describes the security assessment.\n * A detailed\ - \ security roadmap and best practices to follow.\n* Outcomes\n * Improved awareness\ - \ of the current security.\n * Increased security of the operation and infrastructure.\n\ - \ * Reduced risks associated with possible security breaches (web2 and web3).\n\ - \nMilestone #4\n\n* Goal: Evaluate options for native bridges to bridge to other\ - \ networks (today, only mainnet is supported).\n* Tasks\n * Analyze and research\ - \ the needs and motivations to do it natively versus using/integrating with 3rd\ - \ party solutions.\n * Research and evaluate technical improvements and enhancements\ - \ according to the research.\n* Deliverables\n * A technical plan for enabling\ - \ users to easily bridge to as many networks as possible.\n * Submit GIPs according\ - \ to research.\n* Outcomes\n * The needs of assets bridging of users and protocols\ - \ are clearly defined.\n * Everyone can provide feedback on the future steps.\n\ - \nMilestone #5 (might change the priority to be done sooner)\n\n* Goal: discovery\ - \ phase to build a Bridge Aggregator.\n* Tasks\n * Evaluate building a consolidated\ - \ app that helps users to bridge assets from all kinds of chains to GC using any\ - \ supported solution (could be a combination of Li.finance, xDAI, Omnibridge, Connext,\ - \ Hop, and other options).\n * Identify technical and business requirements.\n\ - \ * Create a Product Specifications Document.\n * Create a roadmap with milestones,\ - \ timelines, effort estimates, etc.\n* Deliverables\n * Evaluation result: Go /\ - \ No Go.\n * Product Specifications Document.\n * Product Development Plan.\n\ - * Outcomes\n * Stakeholders understand if such a product is needed and its value\ - \ to the ecosystem.\n * The team has complete visibility on what needs to be built.\n\ - \nMilestones #6 and beyond: TBD\n\n### 2: Circles infrastructure\n\nWhen referring\ - \ to Circles Infrastructure, the Circle UBI project has been lacking continuity\ - \ of a development team, therefore, making the product roadmap hard to plan as every\ - \ milestone relies on software development. As a result, the enormous potential\ - \ of this ecosystem is not being fully realized. However, we could envision a possible\ - \ roadmap:\n\n* Contribution to user-friendly frontends, including Circles.Land\ - \ and Gnosis Safe.\n* Backends / Subgraphs\n* Monitoring\n* Dashboards\n* SDKs\n\ - * Tech support to other teams building on Circles infrastructure\n* Contribute onboarding\ - \ DAOs to benefit from Circles features.\n\nRoadmap: it is currently under development\ - \ being built by several parties. To be published soon.\n\nScope of Work: Bootnode's\ - \ team has already been working on this initiative as an ongoing project since May\ - \ 2022, contributing with: back-end, front-end, QA, UI, and Project Management.\n\ - \nAs an outcome of this proposal, we expect to maximize the overall Circles UBI\ - \ growth.\n\nThe ecosystem will initially benefit as follows:\n\n* Circles users\ - \ (individuals and DAOs): will enjoy new features, improved reliability, and great\ - \ UX.\n* Gnosis DAO: additional level of certainty in fulfilling the Circles UBI\ - \ vision.\n* Projects building on top of Circles; core infrastructure:\n * Public\ - \ roadmap with the features the team will implement in the future.\n * Access to\ - \ propose and prioritize feature requests.\n* Gnosis Chain: higher block utilization\ - \ due to the expected growth of the Circles protocol.\n\n### 3: Gnosis Beacon Chain\ - \ decentralization and security\n\nBootNode will setup and run the Gnosis Chain\ - \ full-stack (validator nodes and bridges) focusing on the Gnosis Beacon Chain and\ - \ its path to the merge contributing to making it happen before Main net.\n\nRoadmap:\ - \ [https://evening-lake-61d.notion.site/Gnosis-beacon-chain-merge-ca7e8759e5094b18accdc077e4959315](https://evening-lake-61d.notion.site/Gnosis-beacon-chain-merge-ca7e8759e5094b18accdc07)\n\ - \n### 4: Gnosis DAO growth\n\nWe believe that by relying on a long-term committed\ - \ engineering team, GnosisDAO ecosystem will be able to work on a more sound, clear,\ - \ and executable vision, considerably increasing the probability of hitting every\ - \ milestone in the roadmap. Therefore, many other Gnosis ecosystem’s efforts can\ - \ count on the outcomes produced by this team:\n\n* Support community development\ - \ and education about Gnosis Chain, Bridges, and Circle UBI.\n* Be available for\ - \ different potential needs of the DAO and the community.\n* Support research, create,\ - \ and deliver new proposals within GIPs and expand Gnosis Chain to other ecosystems\ - \ (protocols, networks, infrastructures, etc.).\n* Protocol smart contracts development\ - \ and GIP support.\n* Attend technical conferences and Gnosis DAO events to support\ - \ growth.\n* Support pair programming sessions and education with dApp teams to\ - \ share best practices and one-on-one support.\n* Bootstrap, run, and manage Gnosis\ - \ Beacon Chan and Gnosis Chain validators aligning long-term via GNO incentives.\n\ - \n### Team\n\nBootNode excellence in delivering an outstanding contribution and\ - \ thinking outside the box is leveraged by already existing characteristics that\ - \ have been poolish as a result of a team with an average of 10+ years of experience\ - \ building and shipping software for many industries and 5+ years for the EVM ecosystem\ - \ in particular.\n\nWe have identified the right candidates to build a **6 to 8\ - \ members cross-functional and autonomous team (a Squad)** with all the required\ - \ skills to work on the proposed scope of work, contribute to the network roadmap,\ - \ and other potential work valuable to the chain.\n\nSome team members have participated\ - \ in designing and developing the two existing native bridges (OmniBridge and xDai\ - \ Bridge) and have worked with other cross-chain projects contributing to the core\ - \ protocol and integrations, such as Connext Network. Also, part of the team has\ - \ been contributing to building the Circle infrastructure developing a “Group Currency”\ - \ layer on top of Circles for a couple of months and is fully knowledgeable about\ - \ it.\n\nBootNode’s track record of experience in the field provides a competitive\ - \ advantage to the GC that could speed the solution, derisk the DAO, and meet expectations.\n\ - \n### Progress status\n\n* Bi-monthly progress reports in the forum.\n* Participation\ - \ in the community calls.\n* Discord channels.\n* Roadmap, backlog, prioritization\ - \ discussions, etc. are transparent and visible in notion, GitHub, and any other\ - \ tool consistent with the other teams.\n\n### Terms of the Agreement\n\n* Time\ - \ horizon: 6 months (closer to the end, a follow-on proposal will be created).\n\ - * Amount: $580k in DAI or USDC.\n* GNO: 580 GNO (exclusively for running GBC validators\ - \ for at least 12 months).\n* Safe address in main net: eth:0x3bCba50Ec74d18c583e0A832DD19AE37E9348790\n\ - \n### Duration and Termination\n\n* This proposal shall come into force and be binding\ - \ upon the Parties from the date the proposal is approved by the GnosisDAO governance\ - \ mechanism.\n* The GnosisDAO may terminate BootNode’s engagement under this agreement\ - \ for any reason by Governance Mechanism upon a 30-day notice as a new discussion\ - \ thread in the GnosisDAO forum.\n* BootNode may terminate this agreement upon a\ - \ 30-day notice as a new discussion thread in the GnosisDAO forum.\n* Without previous\ - \ notification, BN will be entitled to terminate this agreement if GnosisDAO fails\ - \ to make payments for more than 2 consecutive periods.\n\n# About BootNode\n\n\ - **[BootNode](http://bootnode.dev/)** is a long-term dev & engineering partner focused\ - \ on the Ethereum ecosystem that accelerates the development and adoption of decentralized\ - \ infrastructure, protocols, applications, and ecosystems through engineering and\ - \ investment.\n\nFounded by a team of engineers with an average of 10+ years of\ - \ experience building and shipping highly available, highly scalable software for\ - \ many industries and 3+ years for the blockchain ecosystem in particular.\n\nBoot\ - \ Node contributes in different phases as an interdisciplinary team, from ideation\ - \ to massive adoption. \n\n> more details in the forum." -start: 1660142102 -end: 1660746902 -state: closed -author: '0x2036CAfe136F1Ba6201ca6Da6fcf461bD4c5e635' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 429470.563016967 -scores: - - 342051.18372301076 - - 84235.43701159944 - - 3183.942282356569 -votes: 588 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-62.yml b/public/GIPs/GIP-62.yml deleted file mode 100644 index 97bdcbed..00000000 --- a/public/GIPs/GIP-62.yml +++ /dev/null @@ -1,239 +0,0 @@ -id: '0x909097194621a5be59ce7ad473974524d8806c0b824fb21396101cb3f3bb4408' -gip_number: '62' -url: https://snapshot.org/#/gnosis.eth/proposal/0x909097194621a5be59ce7ad473974524d8806c0b824fb21396101cb3f3bb4408 -title: Should GnosisDAO Sponsor Prode Markets? -body: '# Simple Summary - - - Prode is a decentralized betting platform built using Reality.eth and Kleros and - currently deployed on Gnosis Chain. Unlike other projects like Omen or Azuro where - 1-question markets are created and supported by liquidity providers, Prode focuses - on betting pools in which users bet on multiple outcomes and compete against each - other for the highest prize. This is a very popular type of sports betting scheme - that has been played across the world for many decades. - - - Prode was officially launched 1 month ago after 4 months of intense work and without - any external funding. To bootstrap the first markets and kickoff adoption of the - platform, the Gnosis DAO could sponsor the most attractive markets in exchange for - some of the creator''s fee rights of the markets chosen. Additionally Gnosis DAO - could provide funding to the Prode team to support the project''s development and - advertising. In exchange for the funds, Prode commits to giving GnosisDAO 100k USD - worth of governance tokens once the Prode token is released. - - - # Motivation - - - 1. Increase adoption of Gnosis Chain. We noticed that the onboarding of new users - is an issue, because getting xDAI on Gnosis Chain for the first time is confusing - and sometimes not very straightforward. There''s also a lot of competition among - sidechains and L2s, and Gnosis Chain is not the most popular one. - - - 2. Attract users and market creators to Prode. In the type of prediction markets - Prode focuses on, users usually look for markets with potentially big prizes (a - bit like a lottery). Initially, this is hard to achieve, because the dapp traffic - is low and therefore there are no market creators advertising their market pools, - and vice versa. One of the strategies to overcome this is to start creating markets - ourselves and fund them with juicy prizes. - - - # Specification - - - Total requested amount: 200k xDAI: - - - * 100k for sponsoring markets. - - - * 50k for the team. - - - * 50k for marketing. - - - ### Funds Allocation Details - - - Sponsor the following markets (100k xDAI total): - - - * FIFA World Cup Qatar 2022. 20k xDAI. Creator fees (5%) will be used to incentivize - the referral program within this market. - - - * T20 Cricket World Cup 2022. 5k xDAI. Creator fees (5%) go to UBI Burner to support - the UBI price and attract its community and supporters. - - - * F1 Grand Prix Japan & Brazil. 2.5k xDAI each. Creator fees (5%) go to GnosisDAO. - Breakeven*: 50k xDAI each. - - - * League of Legends World Cup 2022. 5k xDAI. Creator fees (5%) go to GnosisDAO. - Breakeven*: 100k xDAI. - - - * CS:GO BLAST Premier: World Final 2022. 5k xDAI. Creator fees (5%) go to a public - good project TBD. - - - * Upcoming 30 weeks of the NBA. 15k xDAI evenly split into each week matches. Creator - fees (5%) go to GnosisDAO. Breakeven*: 10k xDAI per market. - - - * Upcoming 30 matchdays of the English Premier League. 30k xDAI evenly split into - each matchday market. Creator fees (5%) go to each subsequent matchday market. - - - * Upcoming 20 matchdays of the Argentinian football league. 5k xDAI evenly split - into each matchday market. Creator fees (5%) go to UBI Burner to support the UBI - price and attract its community and supporters. - - - * 5k xDAI will be converted to bet vouchers and distributed to active Proof of Humanity - users instead of used to directly sponsor a chosen market. This will be important - for a couple of reasons. First, it will signal what markets are preferred (at least - by an active ethereum community). Second, it will bring activity and promotion to - Prode. Last, it will help onboard Ethereum Mainnet users to Gnosis Chain. - - - * Similarly, 5k xDAI will be converted to bet vouchers and distributed to active - bettors of Prode''s competitors, both from Gnosis Chain and other Chains. - - - *The breakeven point refers to the market pool size needed to recover the funds. - It could be lower if significant royalties are generated or if other sponsors fund - the market; it could be greater if a lot of users bet in the markets through referral - links. A bet placed after entering the market through a referral link will split - the creator fees in halves: 50% to creator and 50% to referral. - - - Team funding (50k xDAI). Although the team has been self-funding the project for - the past 5 months and will continue to do so in the short term, this extra funding - will allow the team to start working full-time on the project for the next 6 months. - Prode is currently being developed by 3 devs from the Kleros community. Additionally, - this funding would be enough to hire 2 interns for communication purposes and contract - free-lancing design services for the front-end and Prode''s NFTs. - - - Marketing funding (50k xDAI). Sponsoring markets alone is not enough to attract - users to Gnosis Chain and Prode. The 50k USD requested will be used as follows: - - - * ~15k xDAI will be used to partner with sports influencers/streamers/casters in - order to promote Prode and its markets. - - - * ~15k xDAI will be spent in traditional online advertising services. - - - * Based on what is learned in the upcoming months, 20k xDAI will be used in 2023 - Q1 to (1) sponsor strategic markets and (2) explore markets we haven''t considered - yet. - - - ### PRODE Token - - - The Prode protocol generates fees from each market. The team is in the process of - designing a governance token that will allow holders to manage the DAO''s funds - and control some protocol parameters. Once the token is released, GnosisDAO will - receive 100k USD worth of PRODE tokens. The price taken into account to calculate - the distribution will be equal to the cheapest price the tokens were sold at. - - - # Rationale - - - Prode markets tackle a prediction market niche that is currently unattended in the - blockchain industry. On the other hand, most decentralized prediction markets platforms, - which focus on single-event predictions, struggle to sufficiently incentivize liquidity - providers. Prode markets don''t have this problem, because the prize pool is bootstrapped - from bettors themselves. However, until Prode gets more popular and its market creator-bettor - ecosystem consolidates, sponsoring key markets could help adoption greatly. - - - A bettor who is not familiar with Gnosis Chain and Prode might not be attracted - to the platform if the prize pools are low. If attractive markets such as the FIFA - World Cup market gets a 25k USD funding, this would be a huge incentive for new - users to join the network. - - - 2022 Q4 will be a time of very popular sport events. This is a huge opportunity - to gain traction. Some examples: - - - * According to FIFA ~150 bn USD worth of bets were made during the World Cup 2018 - held in Russia. We should try to capture some of this for the World Cup 2022. - - - * Cricket is a very popular sport in Australia, India, Pakistan and England, which - constitute very big and diverse markets. In october the cricket world cup will happen. - - - * Esports have experienced a huge growth in the last decade and so have prizes and - bets around its tournaments. People following esports - usually young, techy gamers - - are a good fit for crypto/online bets, because they will deal better with the - UX friction dapps have. There are some big tournaments coming and we should make - the most of them. - - - * While big events attract a lot of users, they happen only a few times a year at - most. It''s also important to incentivize smaller markets that can be played on - a regular basis and thus create engagement in the long run. Football leagues are - a good opportunity to test this out. - - - # Implementation - - - Once this GIP gets approved, the ownership of the creator contracts of the markets - mentioned above will be transferred to the GnosisDAO address on Gnosis Chain. Afterwards, - either Prode''s team can administer the market funding on behalf of GnosisDAO or - the GnosisDAO can fund the markets directly by calling fundMarket(""){value: sponsoredValue} - in each market. These operational details will be discussed with the Karpatkey DAO - team. - - - 5% of the pools'' xDAI, including the funds sponsored, will be rewarded to the creator - address when the market closes. Additionally, if bets positions get traded in a - secondary market that supports royalties, the creator address (GnosisDAO or UBI - Burner) will receive 1.5% of trades as royalties. - - - The 100k USD requested for development and marketing will be sent to the Prode''s - multisig, which will administer the funds, on Gnosis Chain: 0x0029ec18568F96AFE25Ea289Dac6c4703868924d. - - - ## Relevant links - - - * App: [https://prode.eth.limo](https://prode.eth.limo/) - - * https://github.com/prodeapp - - * Twitter: https://twitter.com/prode_eth' -start: 1662657607 -end: 1663262407 -state: closed -author: '0x78DA2BCE1d0D8F81cd72c7274A2C4683B42b3AE6' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 21538.06704783013 -scores: - - 20610.47453669415 - - 804.4492285436486 - - 123.14328259233804 -votes: 525 -quorum: 0 -funding: - amount: 100,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-63.yml b/public/GIPs/GIP-63.yml deleted file mode 100644 index 4106f976..00000000 --- a/public/GIPs/GIP-63.yml +++ /dev/null @@ -1,172 +0,0 @@ -id: bafkreiftomumwvja4bjhkl4oqdwn24v7weuqa3embasjb36wrpu4tf67zi -gip_number: '63' -url: https://snapshot.org/#/gnosis.eth/proposal/bafkreiftomumwvja4bjhkl4oqdwn24v7weuqa3embasjb36wrpu4tf67zi -title: Should GnosisDAO award a Grant to Algovera to develop a DAO framework for Decentralized - AI Teams? -body: 'Simple Summary - - Algovera is requesting a grant of $50,000 to develop a DAO framework (on top of - Gnosis smart contracts) for decentralized AI teams. This will involve building a - Proof of Concept for publishing and co-owning AI assets in a trustless manner, receiving - profits generated by assets to the treasury, and sharing profits generated with - team members. - - - Algovera - - Algovera is a community of independent AI teams developing user-centric Web3 AI - applications. We’re building an AI creator platform where teams and their community - can keep ownership of and monetize their creations. We provide support to teams - including funding, community events/workshops and our decentralized AI framework - (DAID) provides guidance in how to build a decentralized AI DAO that is based on - a vision of cooperation, sustainability and ethics. Algovera Grants 2 has funded - 28 independent AI teams (called Squads) to date. We also train squads to use our - decentralized AI infrastructure, which consists of decentralized storage, compute - and marketplace (developed through grants from Ocean Protocol, 12+ OceanDAO grants - to date and 1 Ocean Shipyard grant, and 1 Filecoin grant). - - - Abstract - - DAO tooling can help to onboard AI developers to Web3, and improve coordination - and governance within distributed AI teams. We have been setting up Squads that - we fund within DAOs (currently DAOhaus) and have run into a number of problems. - It is not possible for AI squads to publish and co-own IP related to data, algorithms - and apps in a trustless manner, and there are no suitable tools for sharing profits - generated by assets. Furthermore, existing tools are targeted at generic Web3 users, - rather than data and AI teams. A UX study that we conducted showed that ownership, - monetization of datasets and AI models are the most important at this time for our - squads and communities. - - - The aims of this project proposal are to (i) build a Proof of Concept for using - Gnosis to enable the publishing and co-owning of data and AI assets, as well as - sharing of profits generated by assets and (ii) onboarding Algovera Squads to Gnosis - and ML teams. - - - Motivation - - AI development is currently controlled and owned by large tech companies within - the singular vision of human-competition, autonomy and centralization, without consideration - for society at large. We experienced this ourselves and would like to change this. - We believe that AI is a common good and communities should have ownership. Although - there are tools to develop AI models such as Kaggle or Huggingface, it is difficult - for AI teams to keep ownership and create sustainable revenue for AI DAO communities. - - - AI teams have hardly any experience with Web3, Gnosis and DAO frameworks. Through - our research and qualitative interviews, we found there is some awareness in the - value of decentralized AI specific tools and architecture but most tools do not - exist yet. Some of the biggest pain points for AI developers are lack of ownership - around what they create in universities and tech companies, and lack of infrastructure - for coordinating and monetizing their creations online. - - - Specification - - Work Package 1: Proof of Concept to publish data sets and AI models for monetization - of marketplaces - - During this work package, we will implement a Proof of Concept for trustlessly publishing - and co-owning IP NFTs for datasets and algorithms through a Gnosis Safe app for - AI DAOs, receiving earnings generated by assets into the treasury, and distributing - earnings back to the contributors/members of the team. Publishing of the asset will - be performed by the multisig, with the transaction being executed after the policy - defined by the multisig has been satisfied. The asset will be published with the - multisig wallet address as the author and any fees associated with the consumption - of the asset will be transferred to the multisig treasury. The final step to the - solution is implementing profit-sharing tools to distribute earnings back to the - contributors/members of the team. - - - Overview of goals: - - - Build a Gnosis Safe app for AI DAOs - - Publish datasets and algorithms to Algovera/Ocean Marketplace through app - - Receive earnings from marketplace into the Gnosis treasury - - Distribute amongst DAO members - - Documentation and video guide to onboard users - - Work Package 2: Onboarding of Algovera Squads to Gnosis and decentralized AI strategy - awareness and education - - In this work package, we will run regular Decentralized AI DAO (DAID) workshops - to not only develop Web3 awareness e.g. onboard our squads to Gnosis safe and monetization - tools but also to expose them to pluralistic strategies of how to develop decentralized - AI organizations. We believe that bringing together GnosisDAO and AlgoveraDAO squads - would be mutually beneficial to the community. - - - Current centralized AI systems do not actively consider community ownership or how - to integrate gender, racial or sustainability factors in developing AI models. Furthermore, - researchers have highlighted the harm of AI models that are benchmarked in human-competition, - autonomy and centralization [How AI Fails Us: Divya Siddarth, Glen Weyl et al. 2021]. - They propose a pluralistic vision of developing AI models that complement, cooperate - and support society rather than compete with humans. - - - This is why we have developed a Decentralized AI DAO framework 2 (DAID) which accelerates - our squads with technical tools and strategies that are rooted in interdisciplinary - team work, human-centered design, ethics, sustainability and community commercial - models. - - - Our goal is to host 2x interdisciplinary workshops with members of the GnosisDAO, - Ocean Protocol, IPFS and Algovera communities for six months, create 6 videos and - 5 tutorials to onboard our Squads to Gnosis, and to foster interdisciplinary teams - to push towards the development of AI datasets and models for Web3 projects and - DAOs. - - - DAID consists of 4 key areas: - - - Primary - Design Thinking: who is the user and who is impacted by my AI model? - - - Community Value Generators: How to achieve sustainable ethical, environmental and - commercial value creation. - - - Decentralized AI activities: from data sourcing, storage, training, deploy to publishing - AI models to market places. - - - DAO activities: covers how to set up a DAO, governance, proposals, treasury management - and member protection and monetization of data sets and AI models - - - Implementation - - The implementations must be completed before any GIP is given status “Final”, but - it need not be completed before the GIP is accepted. - - - ' -start: 1663357776 -end: 1663962576 -state: closed -author: '0x823351c03A99b4820793675760f4A64F5ccA9089' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 918.955916497632 -scores: - - 538.7968534744095 - - 355.9622294998721 - - 24.19683352335034 -votes: 406 -quorum: 0 -funding: - amount: 50,000 - currency: $ (USD) - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-64.yml b/public/GIPs/GIP-64.yml deleted file mode 100644 index 4838443f..00000000 --- a/public/GIPs/GIP-64.yml +++ /dev/null @@ -1,62 +0,0 @@ -id: '0xd9dbc0cebba7b9a27f6fa3f30987b89b4dd50140ee3e21624ebc9bdb16049654' -gip_number: '64' -url: https://snapshot.org/#/gnosis.eth/proposal/0xd9dbc0cebba7b9a27f6fa3f30987b89b4dd50140ee3e21624ebc9bdb16049654 -title: Should GnosisDAO distribute SAFE tokens to incentivize decentralizing Gnosis - Chain? -body: 'As decided in GIP-29, GnosisDAO is receiving 15% of the total SAFE token supply - over a period of 4 years. We suggest using the SAFE tokens to support the main objective - of GnosisDAO: Making the Gnosis Chain successful. We want to position Gnosis Chain - as the most decentralized network available. To support this objective, we suggest - distributing the SAFE tokens as additional yield to those participating in staking - on the Gnosis Beacon Chain. - - - We suggest the following distribution: - - - - Equal distribution of vested SAFE tokens to GNO holders on a monthly basis until - the end of the locking period (February 15, 2023, about 0.9% of all SAFE tokens). - - - Eligible GNO: - - - GNO in locking contracts on Ethereum and Gnosis Chain. - - - GNO used by individual stakers. - - - GNO/sGNO used in the curve pool GNO:sGNO 19 - - - After the end of the locking period: - - Use up to 9.1% of the remaining SAFE tokens as additional yield for stakers on the - Gnosis Beacon Chain over the remaining vesting period. The distribution should be - based on the importance of the different staking categories: - - - individual stakers (e.g. dappnode users) - - - distributed liquid staking (e.g. rocket pool users) - - - professional staking services (e.g. chorus.one) - - liquid staking (e.g. stakewise, lido))' -start: 1663748765 -end: 1664353565 -state: closed -author: '0x6d9ABa400a2a487a5Fb76c6d56518835553CD284' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 105582.86777653798 -scores: - - 99478.5083949482 - - 6103.065728527026 - - 1.2936530627426663 -votes: 671 -quorum: 0 -funding: - amount: null - currency: null - confidence: null - error: 429 Resource has been exhausted (e.g. check quota). - model_used: none diff --git a/public/GIPs/GIP-65.yml b/public/GIPs/GIP-65.yml deleted file mode 100644 index b0ef6769..00000000 --- a/public/GIPs/GIP-65.yml +++ /dev/null @@ -1,226 +0,0 @@ -id: '0x717248745aaf87378361c76f59bbb417c350eaff2cffe2b0e708f95090fa7069' -gip_number: '65' -url: https://snapshot.org/#/gnosis.eth/proposal/0x717248745aaf87378361c76f59bbb417c350eaff2cffe2b0e708f95090fa7069 -title: Should GnosisDAO fund Yubiai? -body: 'https://forum.gnosis.io/t/gip-65-should-gnosisdao-fund-yubiai/5901 - - - # Simple Summary - - - Yubiai is a marketplace developed by ProofOfHumanity community members, where you - can buy & sell services, digital products and physical ones using crypto, this will - allow: - - - 1. Extreme low fees in commissions & gas in every transaction. - - 2. People to have the possibility to use their crypto to buy and sell in a secure - and transparent way. - - 3. People offer their services, physical and digital products globally. - - - To support the development of the Yubiai Dapp, we would like to ask the GnosisDAO - for mentoring & funding in return for Yubiai Tokens & an increase in Gnosis chain - adoption. - - - ## Abstract - - - Yubiai is a project born from the Proof of Humanity community that came together - online to develop a web3 marketplace where you can buy everything with crypto. What - was done so far? - - - * [Demo ](https://prepro.yubiai.market/) - - * [Landing ](https://www.yubiai.market/) - - - [Presentation - - ](https://youtu.be/LuJ3WydMb1E) - - - At the core of Yubiai there are some protocols that give life to the platform: - - - 1. Gnosis Chain builds new market mechanisms for decentralized finance. Their three - interoperable product lines allow you to securely create, trade, and hold digital - assets on Ethereum at very cheap gas fees. Yubiai deploying on gnosis is a must, - enjoy the p2p transactions of everything there is on our platform at the cheapest - gas prices. - - 2. ProofOfHumanity a sybil resistance protocol on the blockchain, a mechanism for - social identity on ethereum. - - 3. [Kleros](https://kleros.io/) Escrow, and the Dispute Resolver. - - 4. Kleros Curate. “ Is this item following the marketplace rules?” By creating a - list, defining guidelines and putting curation in the hands of the community you - make a marketplace to operate accordingly to our own systems of rules. - - 5. [TalentLayer](https://www.indie.talentlayer.org/#/) is the interoperability layer - for work reputation. When you complete a job on Yubiai, you and the person you transacted - with will give each other a review; growing your reputation over time. TalentLayer - IDs allow freelancers on Yubiai to own your reputation as a soul-bound NFT. TalentLayer - IDs are interoperable: your reputation can work on any integrated marketplaces. - If you lose access to your wallet, your TalentLayer ID can be recovered to a new - wallet via an emergency recovery process. - - - To support the team, we are asking for funding from GnosisDAO over 250000 DAI in - return for 25,000,000 YBI tokens transferred soon after the deal is done. - - - ## Motivation - - - 1. Increase adoption of Gnosis Chain. This will benefit gnosis ecosystem and Yubiai - users due to the low gas fees. - - 2. Attract users and sellers to Yubiai. - - - Our goal is to provide a platform where buyers & sellers meet to transact in a secure, - cheap & fast way. We will build a DAO in order to have project participants be in - control over the project. - - - We believe that bringing together GnosisDAO and YubiaiDAO would be mutually beneficial - to the community. By supporting the YubiaiDAO community in technical matters, such - as [Gnosis Chain deployment](https://blockscout.com/xdai/mainnet/address/0xdE677961f2a802DF105d014B8D7042914bb780cf/contracts) - and Zodiac integration, the launch of YubiaiDAO could be facilitated. - - - To enable the YubiaiDAO launch team to keep developing pre-launch, we propose a - token swap in which GnosisDAO would transfer $250,000 worth of DAI to support the - project. In return, we will transfer 25,000,000 YBI tokens to GnosisDAO soon after - the deal, out of a total supply of 1000M YBI tokens at launch. - - - The majority of the funding will go towards the development of the Yubiai Marketplace - and marketing. - - - More information about YubiaiDAO can be found in a dedicated write-up at [Lite Paper - ](https://scythe-yarn-631.notion.site/Links-f792b511b11943c4925778b3a0905eb1). - - - ## Specification - - - * The Yubiai Marketplace will enable $CirclesUBI as currency, beside eth, dai(on - Gnosis chain). - - * GnosisDAO will invest $250,000 worth of DAI in return for 25,000,000 YBI tokens - out of a supply of 1,000,000,000 at the time of launch. - - * Received funds will be managed within the DAO multisig at yubiai.eth. - - * The signers consist of core YubiaiDAO members. If interested, a representative - from GnosisDAO can join the signatories. - - * yubiai.eth will hold the minter role for YBI tokens. - - * A portion of the revenues, including but not limited to transaction fees generated - on the Yubiai Marketplace, will flow back to YubiaiDAO. - - * Deploy of the Yubiai Marketplace on Gnosis Chain. - - - ## Rationale - - - Yubiai tackles peer to peer transactions of services, physical & digital goods, - NFTs using crypto as currency, we believe that this usecase hasn’t been developed - enough (most projects focusing on financial applications) and that Gnosis Chain - using a stablecoin as its native token is the perfect chain for ut. Others projects - attempting to create marketplaces, do not have the protocols that we are leveraging - in order to provide the best and safest UX as well as all the incentives that are - in place, such as the lowest fees from each transaction, leveraging the Proof Of - Humanity community and being able to get the most out of their offerings for the - seller and get their needs met by the buyers. The marketplace business has huge - adoption of the total crypto population. - - - - - ## Implementation - - - Once this GIP gets approved, the 250k USD worth in DAI requested for development - and marketing will be sent to the Yubiai’s multisig, which will administer the funds: - 0x17d79CF96896c4d2aa4d4a19a2c8dD08DaFd163D. And Yubiai gnosis multisig will send - 25,000,000 $YBI tokens to GnosisDAO address. - - - ## Tokenomics - - - * User Incentives : 50% - - * Treasure/DEX Liquidity: 20% - - * Team: 15% - - * Advisors/Help: 2.5% - - * Marketing: 12.5% - - - ## Funds Allocation Details - - - * Team salaries - - - 150k DAI - - - * Marketing - - - 100k DAI (focusing 50% on the weeks before and during the launch). The rest to maintain - a stable {but less intensive} (marketing effort for the rest of the year). This - rest would be locked and would be unlocked progressively on time. - - - Total 250k DAI - - - ## References - - - * [Ultra lite paper ](https://scythe-yarn-631.notion.site/Links-f792b511b11943c4925778b3a0905eb1) - - * [Testing(on goerli) ](https://app.yubiai.market/) - - * [Github ](https://github.com/yubiai) - - * [Telegram ](https://t.me/yubiai) - - * [Twitter](https://twitter.com/YubiaiM)' -start: 1663356357 -end: 1663961157 -state: closed -author: '0x245Bd6B5D8f494df8256Ae44737A1e5D59769aB4' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 21023.50759161606 -scores: - - 20052.653106539503 - - 800.311525169329 - - 170.5429599072328 -votes: 410 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-66.yml b/public/GIPs/GIP-66.yml deleted file mode 100644 index 6d11cf4e..00000000 --- a/public/GIPs/GIP-66.yml +++ /dev/null @@ -1,41 +0,0 @@ -id: '0xba3e2d4617954083a052dc08150315a152e835bbbd34c576a86976cf3dda6452' -gip_number: '66' -url: https://snapshot.org/#/gnosis.eth/proposal/0xba3e2d4617954083a052dc08150315a152e835bbbd34c576a86976cf3dda6452 -title: Should GnosisDAO sponsor The DAOist Bogota? -body: "The DAOist Bogota will be an event on Sunday, October 9th that will kickoff\ - \ Devcon week. This time we will go for our biggest, most ambitious DAOist event\ - \ yet aiming to have up to 1400 attendees.\n\n**If you're interested in supporting\ - \ this proposal, please submit your vote ASAP so that the DAOist can include GnosisDAO\ - \ as a sponsor in the deliverables in time** \n\nAs “The DAO chain”, Gnosis Chain\ - \ is invited to participate as sponsors for this event contributing also through\ - \ talks and/or workshops from contributors that will be joining us in Colombia this\ - \ year.\n\nIn the past, different DAOs that live in the Gnosis Chain, as well as\ - \ Gnosis itself, have participated in the Paris, Lisbon, Mexico City & Amsterdam\ - \ editions of The DAOist. This is an opportunity to reaffirm why Gnosis Chain is\ - \ a great home and neighborhood for current, new and future DAOs.\n\nBased on community\ - \ signaling, for $11,000 USD GnosisDAO would be getting the following benefits from\ - \ the Ride or DAO tier:\n* Talk Slot\n* Online & Print visibility\n* 8 tickets -\ - \ All inclusive\n* 1 Summoner Swag Bags\n\nThe DAOist Bogota will happen on Sunday,\ - \ October 9th, 2022. A talk has been suggested by @Jahed on “How DAOs can use the\ - \ pattern library and what mistakes it can help them avoid”." -start: 1664807865 -end: 1665412665 -state: closed -author: '0xB22981bA3FE1De2325935c91a3B717168fB86714' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 1434.3586471709777 -scores: - - 386.84234485768167 - - 1006.1413982012622 - - 41.37490411203405 -votes: 574 -quorum: 0 -funding: - amount: 11,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-67.yml b/public/GIPs/GIP-67.yml deleted file mode 100644 index 37e5408f..00000000 --- a/public/GIPs/GIP-67.yml +++ /dev/null @@ -1,170 +0,0 @@ -id: '0x8d79d7db03736acf31af752efa45ef49106afbf7b7ecc174d839811fa5281b57' -gip_number: '67' -url: https://snapshot.org/#/gnosis.eth/proposal/0x8d79d7db03736acf31af752efa45ef49106afbf7b7ecc174d839811fa5281b57 -title: Should GnosisDAO fund Gnosis (chain) Ecosystem Analysis and Dashboard? -body: 'Simple Summary - - To create an in-depth Ecosystem Report and Live Ecosystem Dashboard that helps attract - new resources to Gnosis and improve resource coordination among existing stakeholders. - - - Abstract - - To improve resource coordination and allocation within the Gnosis ecosystem, GnosisDAO - should fund the creation of a curated overview and ecosystem dashboard. This will - improve navigation of the Gnosis ecosystem and fast-track decision-making (such - as investments, grants, partnerships, business development, and more). A curated - Gnosis overview based on an in-depth analysis of its key players will strongly improve - the UX and navigation of projects building on the Gnosis chain. - - - Motivation - - The Gnosis ecosystem evaluation and dashboard aim to improve UX for new joiners - and longstanding contributors. It will speed up decision-making and coordination - by improving the navigation of the space through a curated ecosystem overview. This - will also enable new features, such as sorting all projects by a rating score. Thus - users can easily find projects that fulfill their needs and match their level of - interest or risk appetite. - - - Making it easier for Gnosis stakeholders to understand and navigate all projects - on Gnosis will save a lot of time and resources related to due diligence and decision-making. - - - The report and dashboard can also be used as a starting point for a potential GnosisDAO - Ecosystem Fund or any other Grants/Builder program. Moreover, it can be used as - a benchmark to follow the developments and improvements and uncover gaps. - - - Specification - - The program will start with an ecosystem mapping and methodology improvement facilitated - by two top-raters of Prime Rating (rank Master 1 or higher). An updated version - of the current review framework will be made to match the Gnosis context, and a - list of all projects on Gnosis with research priorities will be created. - - - After the pre-research, the Prime Rating team will host two seasons (rating contests) - in collaboration with Gnosis community members to evaluate at least 40+ projects - on Gnosis. During these events, analysts can get rewarded with DAI, GNO, and D2D - for reviewing the Gnosis ecosystem. - - - From this research, two resources will be created, namely: - - - An Ecosystem Report - An easily digestible report that showcases the existing ecosystem - (from tech to projects built on the Gnosis chain and identifies potential areas - for improvement to expand the ecosystem). The report can be used by users, builders, - and funders alike to speed up their decision-making. - - - The Gnosis Dashboard - A web application that provides an overview of all projects - on Gnosis that can be reviewed using our methodologies with a letter score based - on a proven methodology, analyzing the quality of key attributes of each project - (including team, governance, tokenomics, value-proposition and more). The Dashboard - will be tailored to Gnosis and hosted on a Gnosis-native domain. An example of a - dashboard can be found here 3. - - - Review Methodology and Process - - The project will be executed by Prime Rating, an analyst collective with over 50+ - contributors that operates as an independent sub-DAO of PrimeDAO. Since early 2021, - Prime Rating has created multiple frameworks to evaluate projects and ecosystems - with over 200+ reports created by 60+ individuals and successful projects executed - with Celo, 1kx, Kyber, and Metaportal. It has a partnership with leading research - group DeFi Safety which provides the technical review, whereby Prime Rating focuses - primarily on the fundamental side. - - - Prime Rating operates as a DAO - where reports are created by analysts and reviewed - by experienced DAO members in a Web 3.0 native way - allowing for native ecosystem - members to learn, level up, and earn rewards. Analysts in Prime Rating earn a rank - by successfully submitting reports accepted via governance, which is manifested - as on-chain reputation, thus representing their experience. - - The current review framework includes DeFi, Metaverse, and ReFi and provides deep - insights into the reviewed projects. This is then translated into a letter score, - representing the overall quality of a project. - - - Implementation - - Timeline and Budget - - - Within 4 weeks of this proposal passing, the top raters of Prime Rating (rank Master - or higher) will create an ecosystem map to ensure a clear overview of the current - Gnosis ecosystem. Based on this preliminary research, an updated version of the - current review framework will be made to match the Gnosis context, and a list of - all projects on Gnosis with research priorities will be created. - - Within 12 weeks of the completion of the pre-research, the Prime Rating team will - host two seasons (each 5-week long rating contests) with existing raters and Gnosis - community members to analyze at least 40+ projects building on Gnosis. During these - events, analysts can get rewarded with DAI, GNO, and D2D for reviewing the Gnosis - Ecosystem. - - Within 4 weeks of the completion of the events, the Prime Rating team will create - a live dashboard similar to the current Rating Dashboard 3 to be hosted on a Gnosis - native domain such as ecosystem.gnosis.io 2 - - Within 6 weeks of the completion of the rate-athons, the top raters will create, - design, and publish an ecosystem report with key insights gained during reviewing - the projects. - - - GnosisDAO will provide 58,500 DAI + 400 GNO to Prime Rating to run the full program - within 18 weeks of this proposal passing. Received funds to be managed by the Prime - Rating multisig at primerating.eth. Rewards to be allocated on Gnosis Chain. - - - Fund Allocation Details - - Below is a breakdown of the expected spending of the budget based on previous campaigns. - - - Preliminary research phase: 8,000 DAI + 40 GNO for three weeks of research by two - top raters. - - Rating Season: 15,500 DAI + 200 GNO to be distributed to analysts and reviewers - (expected to be split between 15+ individuals) - - Ecosystem Report: 10,000 DAI + 60 GNO for four weeks of research by two high-level - raters - - Dashboard: 7,500 DAI + 25 GNO to design, develop and host the Ecosystem Dashboard - on a Gnosis native domain. - - Program Management: 12,500 DAI + 75 GNO for 5 weeks of program management - - Marketing: 5,000 DAI to support marketing and design efforts and purchase media - to support the rate-athon and report. - - Total: 58,500 DAI + 400 GNO - - - All rewards will be allocated on Gnosis Chain to promote usage.' -start: 1664965333 -end: 1665570133 -state: closed -author: '0x5C89C420A9E82Ea9AEDBaAab03302e39982919b9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 2186.7812637765533 -scores: - - 2175.353369147766 - - 8.733973182893616 - - 2.6939214458942824 -votes: 641 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-68.yml b/public/GIPs/GIP-68.yml deleted file mode 100644 index 4837b385..00000000 --- a/public/GIPs/GIP-68.yml +++ /dev/null @@ -1,146 +0,0 @@ -id: gip-68-should-gnosisdao-fund-rndaos-community-health-analytics-and-benchmarking-tool -gip_number: 68 -url: https://forum.gnosis.io/t/gip-68-should-gnosisdao-fund-rndaos-community-health-analytics-and-benchmarking-tool -title: Should GnosisDAO fund RnDAO's Community Health analytics and benchmarking tool? -body: "## Simple Summary\n\nIf Web3 is all about communities, how do we know if we’re\ - \ heading in the right direction?\n\nWe’ve been advancing a research project to:\n\ - \n * develop a framework for Community Health with actionable metrics\n * create\ - \ an open source data collection tool\n * implement the tool in GnosisDAO and others\n\ - \ * analyse the interactions and perceptions data to validate the framework and\ - \ provide insights to advance the Gnosis community.\n\n\n\nWe’re seeking $30,000\ - \ or equivalent as grant match-funding to complete the project.\n\n## About RnDAO\n\ - \nWe’re an R&D DAO with a mission to empower humane collaboration. Having already\ - \ delivered research projects on [sub-DAOs ](https://rndao.mirror.xyz/Qn0Y71EYRUB-6Kn0jH47baWulXoIe-dmTYIVuJeEOt8)and\ - \ [DAO Conceptual Foundations ](https://rndao.mirror.xyz/1zGqbsh1YZNi3I9yvtk_2VMcpyg_dvHF1GlZ_LAO3p4),\ - \ [Decentralised Leadership,](https://rndao.mirror.xyz/7rI4iyJ4tchGdZr3WwEY9Kn_ynB4NvdEIH1UTm1UceU)\ - \ [DAO Compensation ](https://rndao.mirror.xyz/aKI_cniOIsTcxNz4xC0EqzlXDDykwLw6geEc0ipFvIs),\ - \ and [more ](http://rndao.mirror.xyz/).\n\n## Abstract\n\nLike many others, Gnosis\ - \ depends on the health of its community and its vibez—yet understanding and measuring\ - \ these factors (what we call Community Health) is challenging.\n\nToday, Web3 communities\ - \ are left to rely on infrequent transactions data (on-chain records), while data\ - \ from the significantly more frequent social interactions is limited to basic indicators\ - \ of Discord or Discourse, Web2-oriented bots like Statsbot that give simplistic\ - \ measurements, or a patchwork of “homemade” surveys to fill in the gaps. These\ - \ solutions are ill-suited for DAO communities, surveys are time-consuming for community\ - \ managers and contributors to use, and the results of these approaches, hampered\ - \ by poor indicators and/or poor sampling, are unreliable.\n\nPerhaps even direr,\ - \ the lack of real-time analytics leaves DAO community leaders and members without\ - \ established baselines to measure against to understand the impact of community-focused\ - \ initiatives, identify best practices, monitor shocks to the system, or rapidly\ - \ gauge the effects of system-wide changes (such as market crashes, protocol migrations,\ - \ etc.).\n\n## Motivation\n\nTo advance the Gnosis ecosystem by supporting a humane\ - \ understanding of DAOs, enabling community managers, leaders and members to better\ - \ understand and support the wellbeing of communities and know what’s helping and\ - \ what’s hindering them. Ultimately leading to a more resilient and successful Gnosis\ - \ ecosystem.\n\n## Specification\n\nFor the conceptual framework, we have assembled\ - \ a team including two PhDs in network science and an organisation designer with\ - \ significant DAO and community building experience (myself) to bridge both theory\ - \ and practice. We’ve reviewed over 50 papers on the topics of Community, Social\ - \ Network Analysis, Resilience, Trust, Engagement, and more. And are synthesising\ - \ all of these findings to define the key indicators that have high validity and\ - \ high predictive capacity for community health, while also taking a holistic perspective\ - \ that accounts for member’s wellbeing and planning to collect data across communities\ - \ to offer an ecosystem health scrore too.\n\nFor the data collection tool, we’re\ - \ going beyond traditional surveys.\n\nThis research proposal focuses on the use\ - \ of two critical techniques as a starting point:\n\nOrganizational Network Analysis\ - \ (ONA) is a structured way to visualize how communications, information, and value\ - \ creation occur through an organization based on interaction graphs. ONA has been\ - \ shown to provide a wide range of insights to improve contributor retention, avoid\ - \ member burnout, predict team performance and community resilience, identify key\ - \ contributors, enable decentralization, and improve coordination. Although relatively\ - \ new, ONA is gaining in popularity over traditional survey tools.\n\nPulse Surveys\ - \ are frequent and automated micro-surveys that provide qualitative and quantitative\ - \ insights. In traditional organizations, they have been shown to increase employee\ - \ response rate and employee engagement with related initiatives. They’re also used\ - \ as a tool for culture design and implementing culture change. Lastly, Pulse Surveys\ - \ significantly reduce admin work for community managers and related roles.\n\n\ - The data is anonymised and collected in a central repository for this first phase\ - \ (we’re exploring decentralised hosting) and managed by a team having received\ - \ ethics training and at risk of losing their credentials should it be misused.\n\ - \n## Rationale\n\nThe techniques used (ONA based on communication and Pulse Surveys)\ - \ provide maximum insights on Community Health compared with exclusively on-chain\ - \ data analysis. And provide minimum disruption for community members and minimal\ - \ admin compared to long-form surveys and user interviews. Crucially, the techniques\ - \ selected and the usage of Discord messages increase participation by those less\ - \ likely to respond to long survey e.g. those less engaged and thus likely with\ - \ the most valuable feedback to give.\n\nAlthough our initial focus is Community\ - \ Health metrics, the proposed approach sets the foundation for further applications.\ - \ The combination of ONA and pulse surveys offers unprecedented actionable insights\ - \ in real-time. Some of the potential applications and insights for Gnosis DAO and\ - \ Gnosis-Chain-based DAOs are:\n\n * Generate baseline metrics for Community Health\ - \ / vibez to quantify and better understand the impact that a specific event is\ - \ having on a community and/or sub-groups within the community\n * Predict which\ - \ contributors are likely to leave the DAO and take preventive action (without breaching\ - \ privacy)\n * Build funnels to track member onboarding and identify areas for\ - \ improvement\n * Identify measurements of decentralization to serve as KPIs or\ - \ Insights metrics\n * Monitor specific topics like contributor wellbeing, alignment,\ - \ community experience, etc. in near real-time\n * Attract talent and investment\ - \ with objective Community Health metrics instead of proxy metrics like member count\ - \ or proposal count, or financial metrics such as TVL\n * Help new contributors\ - \ find context-rich mentors outside of the existing pool of well-known but time-poor\ - \ candidates\n\n\n\nIn addition to the initial research on Community Health, the\ - \ potential applications mentioned above (and others to be found) can enable more\ - \ effective and targeted efforts to build healthier DAO communities.\n\nThis research\ - \ also helps reduce the tooling gap in DAOs compared to the employee and stakeholder\ - \ experience at traditional corporations.\n\n## Why our Team?\n\nWe combine deep\ - \ expertise in Network Science and Organisational Network Mapping, Business Intelligence,\ - \ DAOs and Community Building.\n\nTeam Leads\n\nKaterinabc \nPh.D. in Team Dynamics\ - \ using Social Network Analysis, Teaching Collaboration, and Organizational Performance\ - \ at Northwestern University (since 2016). \nCo-organized Learning in Networks\ - \ sessions at the International Conference of Social Network Analysis (2018 - 2020),\ - \ and previously advised a people analytics company on social network metrics. \ - \ \nTwitter:[ twitter.com/katerinabohlec ](http://twitter.com/katerinabohlec) \n\ - Linkedin:[ linkedin.com/in/katerinab ](http://linkedin.com/in/katerinab) \nGithub:[\ - \ https://github.com/katerinabc/ ](https://github.com/katerinabc/)\n\nThegadget.eth\ - \ \nSoftware Engineer. Previously, Product Manager at Neolyze (Business Intelligence\ - \ Dashboard for Instagram). \nGithub:[ https://github.com/thegadget-eth/](https://github.com/thegadget-eth/)\ - \ \nTwitter:[ https://twitter.com/mr_gadget22 ](https://twitter.com/mr_gadget22)\n\ - \nDanielo \nPreviously, Head of Governance at Aragon, 8 years experience in Organization\ - \ Design consulting (clients include Google, BCG, Daymler, The UN, and multiple\ - \ startups), and visiting lecturer at Oxford University. \nTwitter*:*[ https://twitter.com/_Daniel_Ospina\ - \ ](https://twitter.com/_Daniel_Ospina) \nLinkedIn:[ https://www.linkedin.com/in/conductal/](https://www.linkedin.com/in/conductal/)\ - \ \nNote: Other RnDAO members will participate throughout the process in user research,\ - \ literature review, tool development, and workshop facilitation.\n\nTeam Advisor\n\ - \nSam \nPreviously, Head of Technical Research at Aragon. Previously, Lead Developer\ - \ of the official JavaScript API for the Ethereum blockchain. \nGithub:[ https://github.com/nivida\ - \ ](https://github.com/nivida) \nTwitter:[ https://twitter.com/furter_samuel ](https://twitter.com/furter_samuel)\n\ - \nSee additional team members here:\n\n[sobol.io/d/rndao/structure?view=circles](http://sobol.io/d/rndao/structure?view=circles)\n\ - \n## Implementation\n\n## Budget & Timeline\n\nBudget\n\n$30,000 in USDC (or equivalent)*\n\ - \nDAO Health Conceptual Framework and translation into actionable metrics: $8,000\n\ - \nData Collection Tool Development (discord bot for interactions data collection,\ - \ config front-end, and results dashboard): $17,000\n\nData Analysis, Insights Report,\ - \ and Community Workshop: $5,000\n\n * the requested budget forms part of a total\ - \ $90,000 target. Total project costs will be split across multiple, participating\ - \ DAOs (grants already received from Aragon and Aave).\n\n\n\nEstimated Timeline\ - \ \n(the work has already begun and we’re currently in week 5 of this roadmap)\n\ - \nWeek 1-8 (completed)\n\n * Literature Review\n * Data Collection Tool PoC\n\n\ - \n\nWeek 9-12 (we’re already at week 9 of this roadmap)\n\n * Finish Data Collection\ - \ Tool Development\n * Data Collection Tool Implementation on Discord\n * Presentation\ - \ of Dashboard Prototype and iteration\n\n\n\nweek 13-16\n\n * Data Analysis and\ - \ Community Health Dashboard go live (possible integration with other dashboards\ - \ /properties)\n * Workshop with community to discuss findings and recommendations\n\ - \n\n\n## GnosisDAO Snapshot\n\n_Phase 2 Proposals: Please ignore this section,\ - \ and leave as is. It is used for Phase 3 proposals. \nPhase 3 Proposals: Add a\ - \ link to the corresponding GnosisDAO Snapshot poll you’ve created._\n\n2 Likes\n" -start: 1664555971 -end: null -state: - - phase-2 -author: danielo (twitter @_daniel_ospina) -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 30,000 - currency: $ (USD) - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-69.yml b/public/GIPs/GIP-69.yml deleted file mode 100644 index 4ec848ab..00000000 --- a/public/GIPs/GIP-69.yml +++ /dev/null @@ -1,91 +0,0 @@ -id: '0x6514a687509c3d974f91ccd602ee9c10f778bd7e855d5e2c154bb8635d3b8860' -gip_number: '69' -url: https://snapshot.org/#/gnosis.eth/proposal/0x6514a687509c3d974f91ccd602ee9c10f778bd7e855d5e2c154bb8635d3b8860 -title: Should Gnosis Partner with DAOhaus to Support DAO tooling on Gnosis Chain? -body: "https://forum.gnosis.io/t/gip-69-should-gnosis-partner-with-daohaus-to-support-dao-tooling-on-gnosis-chain/5970\n\ - \nSummary\nDAOhaus wants to deepen its partnership with GnosisDAO and is requesting\ - \ $300k USD equivalent in stablecoins or GNO to the DAOhaus Core Contributor DAO,\ - \ WarCamp.\n\nAbstract/Description\nDAOhaus provides purpose driven communities\ - \ on Gnosis Chain with an open and free to use no-code platform for launching and\ - \ managing their Moloch DAOs.\n\nBased on our activity on Gnosis Chain and previous\ - \ collaborations with Gnosis, DAOhaus is interested in deepening the partnership\ - \ between GnosisDAO and DAOhaus by supporting initiatives to drive more activity\ - \ and communities to the Gnosis Chain ecosystem.\n\nOur goals around making DAO\ - \ tooling more accessible and composable for both users and developers aligns with\ - \ Gnosis’ goals to attract more users and developers to the Gnosis Chain ecosystem.\n\ - \nWe believe Gnosis Chain enhances the cultural relevance of the Ethereum ecosystem\ - \ and is comparable in cultural legitimacy to Mainnet. DAOhaus is thrilled to support\ - \ and be supported by Gnosis Chain.\n\nMotivation/Rationale\nWe have been referring\ - \ to Gnosis Chain as the “DAO Chain” for the better part of a year, and it is safe\ - \ to say that DAOhaus calls Gnosis Chain home.\n\nWe are proud contributors to the\ - \ Gnosis Chain Weekly newsletter, producing a DAO of the Week 1 piece each week\ - \ and the Zodiac DAO wiki as early and ongoing contributors of DAO success patterns.\n\ - \nAll of our core operations take place on Gnosis Chain and DAOhaus has provided\ - \ DAOs on Gnosis Chain with excellent tooling, bug maintenance, support and a seamless\ - \ UX - thanks to Gnosis’ high tx throughput & low costs.\n\nDAOhaus provides pertinent\ - \ subgraph infrastructure to the Gnosis Chain ecosystem, where the daohaus-xdai\ - \ subgraphs [1] [2] [3] have around ~700k queries per day with no server or IP querying\ - \ more than ~40k on a given day, resulting in a fairly wide distribution of DAOhaus\ - \ subgraph queries!\n\nSince 2020, DAOhaus users have created 1k+ DAOs on Gnosis\ - \ Chain, onboarded 10k+ unique DAO members, submitted 40k+ proposals, and launched\ - \ 700+ Gnosis Safes through the DAOhaus app. [1] [2] [3]\n\nAs of 2021, DAOhaus\ - \ DAOs have had approximately $400M in total value flow through the platform.\n\n\ - A stablecoin or GNO grant from Gnosis DAO would increase our capacity to build more\ - \ valuable tools for DAOs and ultimately bring more DAOs, users, devs, and talent\ - \ into the Gnosis Chain ecosystem.\n\nIf passed, DAOhaus and Gnosis will enter into\ - \ a positive and mutually reinforcing collaboration that will sustain growth across\ - \ the Gnosis Chain ecosystem for years to come.\n\nSpecification\nGrant funds will\ - \ be allocated to three primary areas of focus, each of which supports our larger\ - \ objective to bring community-first coordination tools to more human networks.\n\ - \nDeliverables and Activities\n1. New DAO deployment tools\nDevelopment of a Safe\ - \ Summoner App - enabling multisigs to easily level up into DAOhaus v3 DAOs\nDevelopment\ - \ of apps/tools for migrating from DAOhaus v2 to DAOhaus v3\n2. Educational content\ - \ for DAO users & operators\nCreate docs, explainers, and tutorials for new and\ - \ experienced DAO users & operators\nFocus on common governance patterns, best practices,\ - \ migration paths and more.\n3. Developer advocacy, outreach, and support\nTo be\ - \ executed by the DAOhaus developer relations (DevRel) working group\n\nEncourage\ - \ use of the DAOhaus v3 libraries by external development teams\nProvide active\ - \ integration support & guidance to Gnosis ecosystem developers\nInform and execute\ - \ further development of DAOhaus v3 libraries based on developer community needs\n\ - Fund developer grants, bounties, and/or hackathon prizes\nOverview\nEach of the\ - \ above initiatives will support our goal of onboarding 100 new DAOs to Gnosis Chain\ - \ by Q2 2023. Additionally, these activities will have the following positive impact\ - \ for Gnosis:\n\nProvide Gnosis Safe users additional community-oriented options\ - \ for governing their assets and network\nProvide additional paths for developers\ - \ to build on Gnosis Chain and Zodiac\nIncrease support for developers on Gnosis\ - \ Chain\nTeam\nThis work will be conducted by Warcamp, the DAO of core contributors\ - \ to DAOhaus.\n\nThis table represents the current team assembled for executing\ - \ on the deliverables outlined above. Personnel changes are quick on our team and\ - \ can be expected in the coming months. We offer this as a soft guideline for how\ - \ we are thinking about work distribution.\n\nContributor\tPrimary Role\n01000011\ - \ 2\tContent / UX\nadrienne 1\tDesigner\nAmos 1\tDevRel\nAvi 1\tDesigner / UX\n\ - Bau 1\tContent\nBrian 1\tDeveloper\nChristina 1\tContent\nearth2travis 1\tProject\ - \ Manager\nDekan Brown 1\tDeveloper\nJord 1\tDeveloper\nJP 1\tProject Manager\n\ - Jeremy 2\tTester\nKeating 1\tDeveloper\nPlor 1\tProject Manager\nSantiago 1\tDeveloper\n\ - Sam Kuhlmann 1\tDeveloper\nScott 2\tDeveloper\nSpencer 2\tProduct Manager / PR\n\ - TW 1\tDocumenter\nUI369 1\tDevRel\nFund Dispersal\nTo fund the development of the\ - \ above, DAOhaus is requesting stablecoins or GNO directly to it’s core contributor\ - \ compensation vault (a Safe Minion): gno:0x9Fa12b5507B43229cB5bf96A056fE77E50aA99c9.\n\ - \nWe appreciate any feedback or support you can provide on our proposal, please\ - \ feel free to leave comments in the doc or drop your feedback below!" -start: 1665780018 -end: 1666384818 -state: closed -author: '0x0feF92A34ecF1F742B01c9e3cB2732A83C6067b6' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 1844.8804481285142 -scores: - - 1587.9889034172556 - - 186.54563994146977 - - 70.3459047697886 -votes: 782 -quorum: 0 -funding: - amount: 300,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-7.yml b/public/GIPs/GIP-7.yml deleted file mode 100644 index d5743874..00000000 --- a/public/GIPs/GIP-7.yml +++ /dev/null @@ -1,115 +0,0 @@ -id: QmdbLM9oRMZcKeK7AXR2xkLvSwV6mvCy9y5xP5BDYKEcEW -gip_number: '7' -url: https://snapshot.org/#/gnosis.eth/proposal/QmdbLM9oRMZcKeK7AXR2xkLvSwV6mvCy9y5xP5BDYKEcEW -title: Pay GNO Reward for GNO<>ETH Sushi LP -body: 'Summary: - - - Paying out a GNO reward on top of the SUSHI reward that the GNO<>ETH Onsen pool - pays - - - Abstract: - - - The objective of this proposal is to kick off a crossDAO collaboration attempting - to create stakeholders for both communities (Sushi and GnosisDAO). - - - GNO<>ETH is a part of Onsen and already accrues Sushi rewards. - - - Through a liquidity incentivisation campaign, both teams can distribute voting power - to the members of both communities. - - - Motivation - - - Both Sushi and Gnosis are DAO’s and teams committed to building decentralized products - enabling the future of open finance. - - - It has been quite impressive to see the strong community that has formed around - Sushi, and the GnosisDAO would benefit from feedback and participation from the - Sushi community in order to explore future synergies between our products. - - - As a precedent for this and future collabs, we are currently running this joint - grant program -> https://blog.gnosis.pm/introducing-the-gnosis-safe-sushiswap-grant-f2e597c6d6cb - - - A grant has already been accepted to build a Sushiswap interface inside the Gnosis - Safe’s app store. - - - Specification - - - Pay 700 GNO to liquidity providers on the Sushiswap GNO<>ETH pool with address 0x41328fdba556c8c969418ccccb077b7b8d932aa5 - throughout one month after the proposal has been passed. - - - With the above, we can achieve: - - - - Creating stakeholders for both communities - - - Foment cross-DAO collaborations in the future - - - Increase GNO liquidity - - - Implementation - - - Members of the Gnosis team will develop a DuneQuery that can help track the addresses - that staked GNO<>ETH LP tokens on the MasterChefSushi contact. - - - This will enable the DAO to distribute the GNO reward via the SafeAirdrop app, and - avoid using the “deposit directly to LP contract” method. This will avoid: - - - - Price depreciation for GNO on the LP pair - - - Eliminate people that only deposit to frontrun before the reward is distributed - (not real LPs) - - - Details of the reward - - - - 700 GNO will be distributed to GNO<>SUSHI LP providers that stake their token - on the MasterChef LP Staking Pool (0xc2edad668740f1aa35e4d8f227fb8e17dca888cd) for - one month - - - The eligible period for the reward will start on 0:00 (GMT) of the day after the - phase 3 proposal passes on Snapshot, and will end 30 days later - - After the period has concluded, the Gnosis DAO will use the SafeAirdropApp to distribute - the tokens to all eligible addresses - - - A retrospective post on forum will show the impacts of this proposal and start - a discussion regarding possible repetitions in the future' -start: 1614337200 -end: 1614855600 -state: closed -author: '0xE5243348383f38a44DF70dD8140A4f44F942236e' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 53635.42061785053 -scores: - - 33434.33557352095 - - 20201.08504432958 - - 0 -votes: 42 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-70.yml b/public/GIPs/GIP-70.yml deleted file mode 100644 index b05d8708..00000000 --- a/public/GIPs/GIP-70.yml +++ /dev/null @@ -1,37 +0,0 @@ -id: '0xbdc138180bec423df7b1d84c3ff4a85f3d1b62efba5db8f88a29bee2c4e515bb' -gip_number: '70' -url: https://snapshot.org/#/gnosis.eth/proposal/0xbdc138180bec423df7b1d84c3ff4a85f3d1b62efba5db8f88a29bee2c4e515bb -title: Should GnosisDAO pass a Grant Proposal to partner with Gateway.fm? -body: "Gateway.fm is a distributed blockchain infrastructure company. Our mission\ - \ is to provide enterprise-grade blockchain infrastructure at scale, distributed\ - \ around the world, in a portable way. \n\nGateway.fm team should be supported with\ - \ a significant grant of 1mil DAI upfront, 2mil DAI and 20k GNO vested over 3 years\ - \ allowing us to focus on the Gnosis Chain. The vested GNO should be used for staking\ - \ on the Gnosis Beacon Chain and should only be able to be sold three years after\ - \ the agreement is in place. Gateway.fm's contributions will include but are not\ - \ limited to the following milestones: https://forum.gnosis.io/t/gip-70-should-gnosisdao-pass-a-grant-proposal-to-partner-with-gateway-fm/6079\n\ - \nApart from that, Gateway.fm team will be happy to support Gnosis Chain in achieving\ - \ any future goals that are within the team’s competence and we will be closely\ - \ embedded with the Gnosis teams to secure a successful path forward on the direction\ - \ of new development of the Gnosis Chain." -start: 1666805533 -end: 1667410333 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 190228.89158789066 -scores: - - 190039.00946930825 - - 88.56586397877427 - - 101.31625460378928 -votes: 776 -quorum: 0 -funding: - amount: 3,020,000 - currency: DAI and GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-71.yml b/public/GIPs/GIP-71.yml deleted file mode 100644 index c2cc43f4..00000000 --- a/public/GIPs/GIP-71.yml +++ /dev/null @@ -1,49 +0,0 @@ -id: '0x481ff5ef01d75eb1798c651351c2a9e6c0d7d991a063399eb255e676c92b9bad' -gip_number: '71' -url: https://snapshot.org/#/gnosis.eth/proposal/0x481ff5ef01d75eb1798c651351c2a9e6c0d7d991a063399eb255e676c92b9bad -title: 'Should GnosisDAO support hosted Blockscout explorer for Chiado testnet? ' -body: 'Chiado testnet is an important new part of the Gnosis ecosystem as a developer - testnet. A reliable explorer is required for developers to be productive on Gnosis. - A Blockscout instance should be set up as soon as possible to support Chiado now - and into the future. This instance will rely on a dedicated node supported by Gateway. - Gateway is already working with Chiado and can quickly spin up and support the required - node infrastructure and RPC endpoint. - - - To expedite the process, which is necessary as the merge is coming very quickly, - we are proceeding directly to phase 2. In case this proposal is supported by Gnosis - community, Blockscout team is ready to prioritize this integration, and will try - to launch the instance within one month after passing the proposal. We’ll plan for - minimal branding based on the current Gnosis Chain explorer with monochrome colors - to differentiate Chiado. The instance will be hosted at https://blockscout.com/gnosis/chiado - 4. - - - As detailed in GIP-54 1, costs for hosting additional instances are $50,000 annually - and cover high-capacity bandwidth, infrastructure upgrades, and data storage for - the network. Feature enhancements and priority support are also included. - - - Payment should be made to BlockScout’s Ethereum mainnet 0xAddress 0x242ba6d68FfEb4a098B591B32d370F973FF882B7 - in $BOB tokens.' -start: 1668054110 -end: 1668658910 -state: closed -author: '0xf8C9e2C80036B3e7730De575e3053f3c6539A345' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 116116.18646314762 -scores: - - 115986.36645591247 - - 64.72246694897333 - - 65.0975402862002 -votes: 1196 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-72.yml b/public/GIPs/GIP-72.yml deleted file mode 100644 index 85a7de69..00000000 --- a/public/GIPs/GIP-72.yml +++ /dev/null @@ -1,133 +0,0 @@ -id: '0x4c2453deefd3b5de955ecde254f55b31a52dcff1b220a48343dffa7e1af4f788' -gip_number: '72' -url: https://snapshot.org/#/gnosis.eth/proposal/0x4c2453deefd3b5de955ecde254f55b31a52dcff1b220a48343dffa7e1af4f788 -title: Should GnosisDAO fund Common Ground to support onboarding DAOs to the Gnosis - Chain Ecosystem? -body: "## Simple Summary\nThis proposal would fund [Common Ground](https://www.commonground.cg/),\ - \ the all-in-one communication & governance platform for DAOs & Communities. Built\ - \ as a public good, Common Ground supports the onboarding of DAOs and web3 communities\ - \ to the Gnosis Chain ecosystem.\n\n## Abstract\nIn May 2022, Common Ground launched\ - \ a closed alpha that onboarded over 90 communities by now including MetaCartel\ - \ Ventures DAO, Radicle, Giveth, and Outlier Ventures. These communities selected\ - \ us to provide their members with a more secure, web3 native communication and\ - \ coordination platform. \n\nWe are uniquely positioned to introduce DAOs and web3\ - \ communities to the Gnosis Chain ecosystem. Our current and future features like\ - \ token-gating, on-chain governance voting, and token issuance act as entry points\ - \ for the Gnosis Chain ecosystem. We recently bridged our Governance Token to Gnosis\ - \ Chain to reduce transaction costs and improve speed. In the coming months, we\ - \ plan to launch a public beta of our badge system that could be a great introduction\ - \ to a more formal Gnosis Chain integration on Common Ground.\n\nTest the closed\ - \ alpha yourself with [this referral link](https://app.commonground.cg/?ref=gnosis)\n\ - Common Ground will enter public alpha soon™\n\nWe are seeking a USD 50,000 grant\ - \ from GnosisDAO to further support onboarding DAOs and web3 communities to Gnosis\ - \ Chain by making it the default EVM in all our web3 tooling features. Our goal\ - \ is to establish trust and build our track record with GnosisDAO to explore larger\ - \ opportunities in the future.\n\n## Motivation/Rationale\nEvery web3 community\ - \ relies on communication and coordination to accomplish its goals in a decentralized\ - \ manner. The core of these activities occur on web2 platforms that are not designed\ - \ for web3 use cases. \n\nWe built Common Ground to address three core communication\ - \ and coordination pain points that web3 communities face:\n\n* Web3 native: Our\ - \ platform is built for web3 communities and their members. We plan to integrate\ - \ WalletConnect into our platform so communities can implement features like token-gating,\ - \ on-chain governance votes, token issuances, and airdrops. Members can craft their\ - \ profiles by connecting multiple wallets, showcasing their NFT collection, and\ - \ building their on-chain reputations. \n\n* Security: Community and user safety\ - \ is one of the top priorities for our platform. We introduced core features like\ - \ token-gating so communities don’t need to install bots and third-party apps. We\ - \ also introduced the concept of “human-gating” which allows communities to restrict\ - \ read or write-access to channels to verified humans. Users may opt to verify as\ - \ a human through our partnership with Fractal. This functionality unlocks our ability\ - \ to develop a full-grown Web of Trust that ensures the integrity of all social\ - \ interaction on our platform and can be utilized by other projects in the Gnosis\ - \ ecosystem.\n\n* Onboarding: Communities thrive when they have a frictionless,\ - \ user-friendly onboarding experience. We built our own content management system\ - \ to allow communities to create content flows catered to onboarding, announcements,\ - \ and more. Current and prospective members can easily read the latest announcement\ - \ as well as in-depth articles, learn more about the community, and rapidly onboard\ - \ without searching across multiple platforms for information. \n\nThese core features\ - \ are why web3 communities love our platform and will use our platform for on-chain\ - \ activities like token issuance, governance voting, and airdrops. Our comprehensive\ - \ communication and coordination platform stands to introduce communities to Gnosis\ - \ Chain, Safe, and the broader Gnosis ecosystem. \n\n### **How Common Ground Onboards\ - \ DAOs to Gnosis Chain Ecosystem**\nCommon Ground creates multiple opportunities\ - \ to drive awareness and onboard communities to the Gnosis Chain ecosystem. Currently,\ - \ our governance token and token-gating feature introduce communities and users\ - \ to Gnosis Chain. In the future, our on-chain governance voting, token issuance,\ - \ and more will drive communities directly to Gnosis Chain. \n\nCurrently, a major\ - \ part of the liquid supply of our governance and fee tokens is maintained on Gnosis\ - \ Chain. We are also already issuing our community governance NFTs on Gnosis Chain.\ - \ As we continue to develop our platform and require it for many on-chain transactions,\ - \ communities and their members will discover Gnosis Chain. This serves as one of\ - \ the earliest touch points into the Gnosis ecosystem. \n\nIn the future, these\ - \ are three of the major paths we envision that will onboard communities and DAOs\ - \ into the Gnosis Chain ecosystem.\n\n#### Web3 Communities\nCommunities are the\ - \ precursor for many successful DAOs. As more and more communities explore the power\ - \ of web3 and DAOs, they will look for guidance and tooling that frictionlessly\ - \ onboard them. We’re building Common Ground with this major use case in mind by\ - \ developing tooling for companies to easily launch a governance token, implement\ - \ on-chain voting, and handle mass airdrops to existing members. \n\nCommon Ground\ - \ is positioned to be the trusted source to transition communities into DAOs as\ - \ the communication and coordination layer for them. In all our tooling, we can\ - \ place Gnosis Chain as the default EVM that will drive awareness and adoption of\ - \ Gnosis Chain. Our communities will appreciate the low transaction fees, high speeds,\ - \ and safe bridging onto Gnosis Chain. This will likely motivate them to explore\ - \ the Gnosis ecosystem further.\n\n#### Existing DAOs\nCommon Ground addresses some\ - \ of the core pain points that growing DAOs experience – onboarding, on-chain governance\ - \ voting, and security. These features attracted our core user base for our closed\ - \ alpha and contribute to consistent applications for our closed alpha. As DAOs\ - \ continue to adopt our platform, we have the opportunity to introduce and onboard\ - \ them to Gnosis Chain. \n\nDAOs strive for on-chain governance but hesitate due\ - \ to Mainnet transaction costs. Our future governance feature allows DAOs to streamline\ - \ on-chain voting and improve engagement while reducing transaction costs by leveraging\ - \ secondary chains. This is one of the key areas where we can onboard DAOs into\ - \ the Gnosis Chain ecosystem. We can place Gnosis Chain as the default EVM to make\ - \ use seamless. \n\nCommon Ground serves as an onboarding platform for the Gnosis\ - \ Chain Ecosystem. Our tooling introduces and onboards communities and DAOs seamlessly.\ - \ We have the ability to raise awareness and grow the DAO community on Gnosis Chain.\n\ - \n#### Web2 Communities & Users\nThere are hundreds of thousands of communities\ - \ that may investigate more formal governance and DAO structures in the future.\ - \ We want to make onboarding these communities seamless by developing a knowledge\ - \ repository about web3 that features helpful articles, how-to videos, and more.\ - \ \n\nCommon Ground would feature Gnosis Chain as the default chain in its educational\ - \ articles and how-to videos. This would introduce communities to the Gnosis ecosystem\ - \ to drive the adoption of Gnosis Chain, Safe, and more.\n\n## Specification\nCommon\ - \ Ground will deliver governance and token issuance features to support onboarding\ - \ communities and DAOs onto Gnosis Chain. We will place Gnosis Chain as the default\ - \ EVM for each of these features.\n\n#### Deliverable #1: Integrated Governance\ - \ Features\n\n* Expected Completion Date: Mid Q1 2023\n* Estimated Budget: $25,000\n\ - * Features:\n * On and Off-chain voting with native UI\n * Polls and temperature\ - \ check tooling\n * Multiple voting systems (e.g. single choice, approval voting,\ - \ quadratic voting)\n * Discussion tools for the governance proposal process\n\ - \ * Snapshot integration\n * Chain picker with Gnosis as the default chain\n \ - \ * Documentation with text and video tutorials\n\n#### Deliverable 2: Integrated\ - \ Token Issuance\n\n* Expected Completion Date: End of Q1 2023\n* Estimated budget:\ - \ $25,000\n* Features:\n * Native UI\n * Default smart contracts for the most\ - \ common token standards (e.g. ERC20, ERC721, ERC1155)\n * Integration of best\ - \ practice solutions for the most common token features (e.g. vesting, time-locking,\ - \ liquidity providing, etc)\n * Chain picker with Gnosis as the default chain\n\ - \ * Documentation with text and video tutorials\n\n## Fund Dispersal\nThe funds\ - \ will be managed and deployed by the Common Ground DAO multi-sig wallet. The signers\ - \ on the wallet are the board members of the Common Ground Association as well as\ - \ trusted core team members. Leftover funds will be deployed towards general improvements\ - \ of the overall platform in terms of security, scalability and useability." -start: 1671196366 -end: 1671801166 -state: closed -author: '0x37F1fE0C626Ab737db7B816bBA4Be91C838f88c2' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 4566.367206936195 -scores: - - 388.7188236838748 - - 129.38595604160238 - - 4048.262427210716 -votes: 556 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-73.yml b/public/GIPs/GIP-73.yml deleted file mode 100644 index 59396e06..00000000 --- a/public/GIPs/GIP-73.yml +++ /dev/null @@ -1,50 +0,0 @@ -id: '0x701e81c3876b0dec446af578ef588c3463d2eeb077ad0afa9c03babf2bc6f435' -gip_number: '73' -url: https://snapshot.org/#/gnosis.eth/proposal/0x701e81c3876b0dec446af578ef588c3463d2eeb077ad0afa9c03babf2bc6f435 -title: Should GnosisDAO give a grant to Pluser? -body: 'Website: https://www.pluser.io/ - - - # Introduction - - The collapse of FTX showed that we can’t trust a centralized exchange. But currently, - there is no simple and safe non-custodial alternative for keeping crypto, investing, - and using web3. We want to show you our solution to the problems of cryptocurrency - wallets. - - - # Summary - - We would like to ask for a grant for the amount of 50000 USD/DAI from Gnosis DAO - to create Pluser wallet. Pluser is the safest and simplest cryptocurrency wallet - for the retail market on Gnosis Chain. Our wallet is built on top of Gnosis Safe - contracts, Chainlink oracles, and Torus network. - - - **Read more [here](https://forum.gnosis.io/t/gip-73-should-gnosisdao-give-a-grant-to-pluser/6210)** - - - - - ' -start: 1670341885 -end: 1670946685 -state: closed -author: '0x000f4ae7700afDE47C3b14D22883b4e7808F0e58' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 4707.200158730945 -scores: - - 204.33282591990672 - - 774.3120577979993 - - 3728.5552750130432 -votes: 895 -quorum: 0 -funding: - amount: '50000' - currency: USD/DAI - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-74-redo0.yml b/public/GIPs/GIP-74-redo0.yml deleted file mode 100644 index a53a1e57..00000000 --- a/public/GIPs/GIP-74-redo0.yml +++ /dev/null @@ -1,29 +0,0 @@ -id: '0xccbc22aa9a506bee8bed466d12424d5678f0bdb38f267980af281c7826680c0f' -gip_number: '74' -url: https://snapshot.org/#/gnosis.eth/proposal/0xccbc22aa9a506bee8bed466d12424d5678f0bdb38f267980af281c7826680c0f -title: Allow sGNO holders to vote and be included in the upcoming airdrops -body: 'This proposal is for allowing stakewise (sGNO ) vote for all the future propossals - with the on going proposal for safe token - - ' -start: 1671350096 -end: 1671954896 -state: closed -author: '0xbcd69Ce8027b930c7712290F4f0c1e8864382123' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 8784.090348560854 -scores: - - 1146.838625390932 - - 4080.695745181683 - - 3556.555977988236 -votes: 564 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-74.yml b/public/GIPs/GIP-74.yml deleted file mode 100644 index 02f8ca0c..00000000 --- a/public/GIPs/GIP-74.yml +++ /dev/null @@ -1,66 +0,0 @@ -id: '0x668ad502b088d88e55aef4de530437d6ba227fb855d72ee13044d17ce6c362a7' -gip_number: '74' -url: https://snapshot.org/#/gnosis.eth/proposal/0x668ad502b088d88e55aef4de530437d6ba227fb855d72ee13044d17ce6c362a7 -title: Should GnosisDAO support Gnosischa.in Explorer hosted by beaconcha.in? -body: "**Gnosischa.in** by beaconcha.in\n\nhttps://forum.gnosis.io/t/gip-74-should-gnosisdao-support-gnosischa-in-explorer-hosted-by-beaconcha-in/6228/2\n\ - \n**Description**\n\nGnosischa.in is an open source explorer that provides users\ - \ with an easy and accessible way to explore the gnosis-chain. Our explorer is designed\ - \ to be user-friendly, making it accessible to non-technical users. In addition\ - \ to our web-based explorer, we also offer an open source mobile app for iOS and\ - \ Android, providing users with the ability to monitor their validators on the go.\n\ - \nOur goal is to make it easy for anyone to access and understand the data on the\ - \ gnosis-chain, regardless of their technical expertise.\n\nGnosischa.in will be\ - \ maintained by bitfly which also operates beaconcha.in, Ethermine Staking, Ethpool\ - \ and several mining pools.\n\nWe have a deep understanding of the challenges and\ - \ opportunities in this space and are confident in our ability to deliver value\ - \ to users of the gnosis chain.\n\n**Project Details**\n\nGnosischa.in – One of\ - \ our key features is the integration of both the consensus layer and the execution\ - \ layer in a single explorer. This allows users to easily access and analyze data\ - \ from both layers, providing a more comprehensive view of the gnosis chain.\n\n\ - In addition to that, it has a mobile app for stakers to monitor their validators\ - \ & machines.\n\n**Product Features**\n\nBeaconcha.in's first-party integration\ - \ with its ecosystem will enable current beaconcha.in premium users to access premium\ - \ features on the mobile app, as well as API access to gnosischa.in and vice versa.\n\ - \n**General**\n\n * Open Source (GNU General Public License v3.0)\n * Supports\ - \ Execution Layer and Consensus Layer\n * Supports multiple networks\n * Written\ - \ in Golang\n * Visualization of blocks and epochs\n * Public API endpoints\n\ - \ * Dashboard for validator monitoring\n * Various tools to export income for\ - \ tax purposes\n * Client Metric exporter for mobile monitoring\n\n**Website**\n\ - \ * Validator Dashboard with status, income, balance, attestations, proposals and\ - \ charts\n * Overviews about blocks, slots, epochs, transactions, validators, slashings\ - \ and the mempool \n * Leaderboards about validators and deposits\n * Charts about\ - \ various network stats\n* Monitoring\n * The monitoring feature analyzes blockchain\ - \ data and (optionally) data provided by a user's staking setup\n * Highly configurable\ - \ notifications and notification channels\n(mobile push, email, webhooks)\n\n**Tools**\n\ - \ * APIs for Execution Layer and Consensus Layer\n * Income History\n * Profit\ - \ Calculator\n * Block Visualizer\n * Unit Converter\n * Graffiti Wall\n\n**Beaconcha.in\ - \ Mobile App Integration**\n * Open Source (GNU General Public License v3.0)\n\ - \ * Dashboard with similar info as the website\n * Notifications about client\ - \ updates\n * Machine stats with charts\n * Widgets\n * Themes\n\n**Funding &\ - \ Disbursement**\n\nHosting costs cover high-capacity bandwidth, infrastructure\ - \ upgrades, data storage and maintenance.\n\nAmount is paid up front for the year\ - \ and can be renewed annually. Payment can be made to beaconcha.in’s Gitcoin address\ - \ 0x9d4E94dB689Bc471E45b0a18B7BdA36FcCeC9c3b in USDT/USDC/GNO ERC20.\n\n$250,000\ - \ annually\n60% in USDT/USDC - $150k in USDC/USDT\n40% in GNO - $100k in GNO (2\ - \ Year lockup)" -start: 1672916217 -end: 1673521017 -state: closed -author: '0xD67952D9a8F27003De7C94D4A76191831165C01C' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 78105.29993206884 -scores: - - 77804.0133376787 - - 247.16184695054628 - - 54.12474743958712 -votes: 620 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-75.yml b/public/GIPs/GIP-75.yml deleted file mode 100644 index 39265d90..00000000 --- a/public/GIPs/GIP-75.yml +++ /dev/null @@ -1,87 +0,0 @@ -id: '0xe051f12c56d14985f6851e179feae8c8c40f7c7702df3f58affbb2a67641eebf' -gip_number: '75' -url: https://snapshot.org/#/gnosis.eth/proposal/0xe051f12c56d14985f6851e179feae8c8c40f7c7702df3f58affbb2a67641eebf -title: Should GnosisDAO retroactively fund POKT-powered Public RPC endpoints for Gnosis - Chain pruned and Gnosis Chain archival? -body: "https://forum.gnosis.io/t/gip-75-should-gnosisdao-retroactively-fund-pokt-powered-public-rpc-endpoints-for-gnosis-chain-pruned-and-gnosis-chain-archival/6363\n\ - \nSummary\n\nPocket Network is a decentralized, middleware protocol focused on the\ - \ RPC layer. Our goal is to provide blockchain application developers with a privacy-preserving,\ - \ multi-chain gateway on top of the Pocket Network protocol that allows dapp developers\ - \ to mint reliable, fast RPC endpoints for the 40+ blockchain networks supported,\ - \ including both Gnosis Chain pruned and Gnosis Chain archival.\n\nOver the last\ - \ month, Gnosis Chain has carved the number 2 spot in terms of requests per day\ - \ at 195M daily avgerage requests according to POKTscan!\n\nAbstract\n\nBy sponsoring\ - \ a pokt-powered Public Gnosis Chain RPC endpoint, GnosisDAO and Pocket Network\ - \ would continue to contribute to the decentralization, increased resiliency, and\ - \ censorship-resistance of the Gnosis Chain network. All the while, continuing to\ - \ incentivize Gnosis Chain node runners with $POKT tokens for serving Gnosis dapps.\n\ - \nPublic RPCs are a public good, we hope to share in the responsibility together\ - \ with the GnosisDAO of maintaining these high-quality public goods on behalf of\ - \ Gnosis Chain users. The Pocket Network team and community have been a long-time\ - \ supporters of the Gnosis Chain.\n\nWe’re proud to continue supporting Gnosis!\n\ - \nMotivation\n\nThe current set of Gnosis Relay Chain IDs (RCIs) we suport are:\n\ - \nGnosis Chain = 0027 (mainnet)\nGnosis Chain Archival = 000C (mainnet)\n\nThe POKTdao\ - \ allowlisted Gnosis Chain (0027) on 07/06/21, with Gnosis Chain Archival (000C)\ - \ shortly after on 08/26/21). Since the allowlist date, Pocket node operators earned\ - \ 55.6M POKT from servicing over 38.9B Gnosis Chain mainnet read/write requests.\ - \ \n\nSee this spreadsheet for a breakdown of relays drive and POKT earned:\n\n\ - https://docs.google.com/spreadsheets/d/13q-hebfwWOCeQbWGuAeclOyu5MQk-m-YHot60Kjd94I/edit?usp=sharing\n\ - \nOver that time, these Gnosis RCIs developed to become one of the more populated,\ - \ stable, and higher-performant pools of nodes. Our network of node runners easily\ - \ handled several spikes, including a big spike to 243.6M requests on a single day\ - \ recently in JAN 2023.\n\nAccording to POKTscan, there are currently 22,379 Pocket\ - \ Service Nodes pointing to Gnosis Full Nodes for the 0027 Relay Chain ID and 2,561\ - \ Pocket Service Nodes pointing to Gnosis Archive Nodes for the 000C Relay Chain\ - \ ID. This demonstrates the POKT node incentives at work!\n\nThe POKTdao supported\ - \ node deployment solutions through funding grants such as Node Pilot and DappNode\ - \ to make it super easy to spin up and monetize Gnosis full/archival nodes within\ - \ the Pocket Network protocol.\n\nRationale\n\nPocket Network Inc. staked POKT on\ - \ behalf of the GnosisDAO to subsizie a public good in the form of public RPC endpoints\ - \ (available in the Gnosis Chain docs) without rate limits:\n\nhttps://gnosischain-rpc.gateway.pokt.network\n\ - https://gnosischain-archival-rpc.gateway.pokt.network\n\nWe’ve simplified our model\ - \ this year to mirror a traditional SaaS-like tiered structure, which is much more\ - \ affordable. To sweeten the deal, we are offering the Gnosis DAO team and community\ - \ a massive discount on a 200M requests per day throughput on a 1-year commitment\ - \ with the option to renew on an annual basis:\n\n$135,997 USD for 200M Requests\ - \ Per Day on a 1-year Contract (i.e. next 12 months)\n\nThat represents 4.8x in\ - \ savings (a 480% discount) compared to the original offer!\n\nIn case a buffer\ - \ is wanted/needed, as traffic continues to grow, we’d like to extend another option\ - \ to purchase additional bandwidth at the discounted price of $0.0000018640 per\ - \ request throughout the contract period.\n\nPublic RPCs are a public good, we hope\ - \ to share in the responsibility together with the GnosisDAO of maintaining these\ - \ high-quality public goods on behalf of Gnosis Chain users.\n\nThe GnosisDAO will\ - \ be able to monitor and manage the public RPCs through our Pocket Portal as they\ - \ see fit, including the ability to enable additional security features such as\ - \ allowlisting user-agents, origins, smart contracts, and methods.\n\nImplementation\ - \ (Completed)\n\nIn return, Pocket Network agrees to these milestones and deliverables:\n\ - \ \n![gip75 implementation.PNG](ipfs://bafkreidpfbqybahguw525twv2is43n5uytgqa6tp53fqdbpevf5rubarl4)\n\ - \ \nIf we are unsuccessful in our proposal to secure retroactive funding, PNI\ - \ will continue to support the Gnosis Chain network; however, in an effort to do\ - \ so sustainably, we would introduce per second rate limits on the Public RPC that\ - \ would channel users and developers to our paid tier in the Pocket Portal where\ - \ costs would be passed on directly to Gnosis builders outside the free tier of\ - \ 250k requests per day.\n\nPayment Schedule\n\nPayment Dates & Amount Due\nUpon\ - \ Proposal Passing 50% = $67,998.50 USD\nUpon Milestone Completion 50% = $67,998.50\ - \ USD\nTotal 100% = $135,997 USD\n\nPNI prefers payment in stablecoins, such as\ - \ USDC or DAI, at this provided address -> 0x5F1Feefc4BB7a414096cCF070BeEF94da8Ff88A6" -start: 1677108324 -end: 1677713124 -state: closed -author: '0xa48168C3D73De7B4Fed96383E2BeF8e53443A263' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 13105.02076704456 -scores: - - 12899.032774695732 - - 79.73094204637862 - - 126.25705030245084 -votes: 694 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-76.yml b/public/GIPs/GIP-76.yml deleted file mode 100644 index c34b891e..00000000 --- a/public/GIPs/GIP-76.yml +++ /dev/null @@ -1,59 +0,0 @@ -id: gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao -gip_number: 76 -url: https://forum.gnosis.io/t/gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao -title: Set up a legal entity controlled and owned by the DAO? -body: "## **Simple Summary**\n\nThis is a proposal to set up a legal entity (in the\ - \ form of an LLC) owned by a Gnosis DAO wallet that enables the GnosisDAO to interact\ - \ with business partners with an incorporated entity.\n\n## **Abstract**\n\nThis\ - \ new legal entity: \n● Can enter into contractual arrangements on behalf of the\ - \ GnosisDAO \n● Can make payments to different service providers that are undertaking\ - \ \nservices on behalf of the GnosisDAO \n● Can hold assets/digital property such\ - \ as patents, copyrights or trademarks \n● Is not owned by a physical person nor\ - \ an official representing the company, \ninstead the legal entity is owned by\ - \ a smart contract address that is \ncontrolled by the GnosisDAO\n\n## **Motivation**\n\ - \nThe GnosisDAO is the decentralized collective steward of the Gnosis ecosystem.\ - \ It is participant managed, and does not have any director or manager. No single\ - \ party is in control. As the GnosisDAO exists entirely on-chain, it is not always\ - \ recognised as an entity with legal personality or limited liability. Some maintain\ - \ that an unincorporated DAO cannot enter into contracts with outside entities,\ - \ hold bank accounts or assets, or make cash payments. In order to be able to function\ - \ in the web2 world, we can create an associated legal entity owned by a smart contract\ - \ address that is controlled by the GnosisDAO.\n\n## **Specification**\n\nTogether\ - \ with OtoCo (see OtoCo - Automated Company Assembly on Blockchain) it is possible\ - \ to create an LLC in Wyoming with a member that is neither a physical person nor\ - \ an official representing a company. Instead, the member can be a smart contract\ - \ address. \nThis is achieved through a so-called Series LLC. A Series has a Master\ - \ and individual Series. Each Series is considered an LLC in its own right, with\ - \ its own name and its own Member(s) independent from the Members of the Master\ - \ LLC and other Series’ Members. Individual Series need a first Member. The first\ - \ Member of a Series LLC can be a smart contract address, using the OtoCo company\ - \ assembly smart contract. \nEach Series LLC is represented by an NFT minted by\ - \ the OtoCo Master contract. Company information, such as the name, is contained\ - \ within the metadata of the NFT, which can be looked up on Etherscan.\n\nTransactions\ - \ can be encoded via payload for a snapshot vote, therefore, transactions do not\ - \ have to be approved manually.\n\nFor further details on the specification, see:\ - \ Part II. The OtoCo Ethereum smart contracts - OtoCo Documentation ([gitbook.io](http://gitbook.io)).\n\ - \n2 Likes\n\n**[next page →](/t/gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao/6369?page=2)**\n" -start: 1674210716 -end: null -state: - - phase-2 -author: "Monika \nstatus: Draft\ntype: Meta\ncreated: 2023-01-20\n\n\nSimple Summary\n\ - \nThis is …" -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-77.yml b/public/GIPs/GIP-77.yml deleted file mode 100644 index f837cef9..00000000 --- a/public/GIPs/GIP-77.yml +++ /dev/null @@ -1,87 +0,0 @@ -id: gip-77-should-the-gnosisdao-add-delegation-spam-reduction -gip_number: 77 -url: https://forum.gnosis.io/t/gip-77-should-the-gnosisdao-add-delegation-spam-reduction -title: Should the GnosisDAO add delegation & spam reduction? -body: "## Simple Summary\n\nThis proposal aims to introduce a number of changes to\ - \ GnosisDAO’s governance setup which will:\n\n 1. Reduce low-quality and spam proposals\ - \ created in the GnosisDAO’s snapshot space.\n 2. Make GnosisDAO’s influence distribution\ - \ less opaque.\n 3. Improve vote-weight utilization.\n\n\n\n## Abstract\n\nBroadly,\ - \ this proposal aims to introduce two changes:\n\n 1. Modify the criteria for users\ - \ to post proposals to the GnosisDAO’s snapshot space. \n 1. Accounts holding\ - \ ≥ 1 GNO can create a proposal (current).\n 2. Add some trusted moderators that\ - \ have the ability to remove posts that they deem to be low-quality. (new)\n \ - \ 3. Proposals with less than < 1,000 GNO of vote-weight cast `for` or `abstain`\ - \ are filtered from the main view. (new)\n 2. Improve delegation \n 1. Improve\ - \ the delegation UI inside of snapshot to make delegation much simpler and to give\ - \ an overview of the current delegated vote-weight distribution.\n 2. Add a two-year\ - \ term limit to delegation, to avoid stagnation in the vote-weight distribution;\ - \ GNO holders must periodically set their delegation, all delegations expire after\ - \ two-years.\n 3. Allow delegates to decline being delegated to / resign from\ - \ delegation, negating any vote weight delegated to them.\n 4. Allow GNO holders\ - \ to delegate portions of their vote weight to multiple accounts.\n 5. Allow\ - \ for transitive delegation; If A delegates to B and B delegates to C, C inherits\ - \ A’s vote weight.\n 6. Allow delegates to optionally set a cap on the amount\ - \ of vote weight delegated to them.\n\n\n\n## Motivation\n\nPopularized by Compound\ - \ Governor, delegation has proven to be an effective strategy for improving the\ - \ vote-weight utilization in many DAOs; consolidating vote-weight in the hands of\ - \ those who have the time and inclination to actively participate in governance\ - \ by allowing users to delegate their vote weight to others.\n\nLargely due to the\ - \ constraints of calculating vote-weight on-chain, Compound and OZ Governor’s delegation\ - \ is somewhat limited. GnosisDAO’s existing delegation strategy on Snapshot already\ - \ improves on one of these limitations by allowing users to delegate their vote\ - \ weight and also directly participate in any vote. If a user does not cast a vote,\ - \ their vote weight will be applied to the vote cast by their delegate. If a user\ - \ does cast a vote, their vote weight will not count towards their delegates vote\ - \ weight in that proposal.\n\nHowever, there is significant design-space to further\ - \ improve on GnosisDAO’s delegation.\n\nSpecifically, we would like to introduce\ - \ changes that:\n\n 1. Reduce low-quality and spam proposals created in the GnosisDAO’s\ - \ snapshot space.\n 2. Make GnosisDAO’s influence distribution less opaque.\n \ - \ 3. Improve vote-weight utilization.\n\n\n\n[Another recent forum](https://forum.gnosis.io/t/enhancing-transparency-and-efficiency-an-idea-for-the-implementation-of-a-governance-structure-based-on-delegates-in-the-gnosis-ecosystem/6334)\ - \ post also argues for delegation, along with suggesting compensation for delegates.\ - \ To constrain scope, this proposal does not include delegate compensation. However,\ - \ if this proposal is successful, and after observing the delegation setup in production,\ - \ we will likely write a followup proposal to implement some form of delegate compensation.\n\ - \n## Specification\n\nTODO\n\n## Rationale\n\nTODO\n\n## Implementation\n\nTODO\n\ - \n8 Likes\n\n[GnosisDAO proposal spam on Snapshot](https://forum.gnosis.io/t/gnosisdao-proposal-spam-on-snapshot/8042/3)\n\ - \n[GIP-109: Should the GnosisDAO introduce Snapshot moderators to reduce spam?](https://forum.gnosis.io/t/gip-109-should-the-gnosisdao-introduce-snapshot-moderators-to-reduce-spam/8812)\n\ - \n[Do we need this forum and what for?](https://forum.gnosis.io/t/do-we-need-this-forum-and-what-for/7977/8)\n\ - \n[Do we need this forum and what for?](https://forum.gnosis.io/t/do-we-need-this-forum-and-what-for/7977/9)\n\ - \n[GIP-101: Should karpatkey and StableLab Establish a Delegate Program v0 for the\ - \ GnosisDAO?](https://forum.gnosis.io/t/gip-draft-establish-gnosisdao-delegate-program-v0/8578/2)\n\ - \n[Karpatkey Delegate Platform](https://forum.gnosis.io/t/karpatkey-delegate-platform/7252)\n" -start: 1674162370 -end: null -state: - - phase-2 -author: 'Gnosis Guild - - status: Draft - - type: Meta - - created: 2023-01-20 - - - poll - - - Simple Summary - - This proposal aims to introduce a number of changes to GnosisDA…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-78.yml b/public/GIPs/GIP-78.yml deleted file mode 100644 index 57c51faa..00000000 --- a/public/GIPs/GIP-78.yml +++ /dev/null @@ -1,136 +0,0 @@ -id: gip-78-gnosis-guild-treasury-allocation-proposal-2 -gip_number: 78 -url: https://forum.gnosis.io/t/gip-78-gnosis-guild-treasury-allocation-proposal-2 -title: Gnosis Guild Treasury Allocation (Proposal#2) -body: "## Simple Summary\n\nThe proposal will fund the Gnosis Guild’s operations\ - \ for one year. The Gnosis Guild treasury allocation would continue to foster needs-driven\ - \ development for the GnosisDAO and of the Zodiac ecosystem at a total of $3,823,575\ - \ paid in 56% DAI and 44% GNO for our contributor compensation plan, administered\ - \ by Gnosis Guild following the vesting schedule laid out in the Gnosis token plan.\n\ - \n## Abstract\n\nGnosis Guild is a society dedicated to interdependent software\ - \ and the growth of the Zodiac Standard. In 2022, Gnosis Guild completed a year\ - \ of needs-driven development for the GnosisDAO and continued to grow the Zodiac\ - \ ecosystem. With this proposal, Gnosis Guild requests funding to continue its development\ - \ of GnosisDAO’s infrastructure, expand the Zodiac collection of tools, and further\ - \ establish Gnosis Chain as an ideal ecosystem for DAOs. The budget allocation includes\ - \ funds for key personnel, operations, grants programs, and other areas as needed\ - \ to sustain this commitment.\n\n## Motivation\n\nWe are a small, but growing,\ - \ team rooted in conviviality, mutualistic ownership, and experimentation. Since\ - \ our last proposal, a year ago, we have completed many projects focused in 4 main\ - \ areas: supporting GnosisDAO, developing novel treasury management tools, developing\ - \ the Zodiac ecosystem, and convivial software experiments.\n\nAn effective and\ - \ productive DAO implicitly spreads the technology on which it’s built; this is\ - \ the core of our symbiotic relationship with GnosisDAO, and by extension, Gnosis\ - \ Chain. In these early days of our organization, it is important to demonstrate\ - \ the effectiveness of Zodiac by supporting Gnosis’s efforts to promote decentralized\ - \ infrastructure. In the past year we have completed:\n\n * [GnosisDAO SAFE Distribution\ - \ Tooling](https://claim-safe.gnosis.io/)—a system to transparently calculate, distribute,\ - \ and claim the portion of SAFE tokens vested to GNO holders.\n * [GIP 28 & 44:\ - \ Allow GNO holders to vote with invested/staked/locked positions in Mainnet/GC](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/18)—We\ - \ deployed a significant upgrade to the GnosisDAO’s governance structure, allowing\ - \ GNO, LGNO, and MGNO on Mainnet and Gnosis Chain to participate in voting.\n *\ - \ [Reality Module Improvements](https://github.com/gnosis/zodiac-module-reality)—We\ - \ have made significant improvements to the Reality Module used for GnosisDAO’s\ - \ governance.\n * [CowSwap Locking Contract](https://forum.gnosis.io/t/candidate-deployment-of-cow-vesting-contracts-for-those-who-locked-gno/4208)—A\ - \ GNO locking contract, for CoW Protocol, for calculating $COW that will be awarded\ - \ to GNO holders that lock their GNO\n\n\n\nGnosis has one of the most productive\ - \ DAO treasuries, due to Karpatkey’s skillful management. Our tooling plays a key\ - \ role in their day to day activities, and was a core component to Karpatkey winning\ - \ the bids to manage Balancer’s and ENS’s treasuries. By supporting the effective\ - \ management of Gnosis’s treasury, we help ensure the long term support of Gnosis\ - \ Chain. In the past year we have built:\n\n * [Zodiac Roles Module](https://github.com/gnosis/zodiac-modifier-roles)\ - \ —The Roles Module enables enforced granular, role-based, permissions for attached\ - \ modules. In combination with the Pilot App, [Karpatkey has utilized these tools](https://medium.com/karpatkeydao/framework-for-an-active-dao-treasury-execution-a30b0b287bb8)\ - \ to securely manage treasury funds in a non-custodial way, and was a key factor\ - \ in their successful ENS treasury bid. Version 2 of the roles mod will allow for\ - \ even greater granularity and modularity.\n * [Pilot ](https://pilot.gnosisguild.org/)Extension\ - \ — The Pilot Extension allows a treasury management team to build a batch of transactions,\ - \ simulate them and queue them as a transaction on any Safe, whether it is using\ - \ Zodiac modules or not.\n * [Zodiac Siphon Module](https://github.com/gnosis/zodiac-module-siphon)—\ - \ This MEV friendly module allows any Safe to make funds transferable from a money\ - \ market into a debt position when undercollateralized. Karpatkey will use this\ - \ to service Maker debt requirements (once audit is complete) .\n\n\n\nThe Zodiac\ - \ ecosystem continues to grow, both culturally and in toolset. Deployed on Gnosis\ - \ Chain (and other EVM compatible chains), our collection of open source modules\ - \ sees regular contributions and use. Zodiac tooling combined with cheap and fast\ - \ transactions make Gnosis Chain the optimal place for DAOs. This year Zodiac has\ - \ expanded with these developments:\n\n * [Zodiac Wiki](https://zodiac.wiki/index.php/ZODIAC.WIKI)\ - \ — This wiki is home to a shared library of reading materials, documentation, stories,\ - \ and a pattern language describing common problems and offering practical responses\ - \ for DAOs.\n * [Zodiac Exit Mod and App](https://github.com/gnosis/zodiac-module-exit)\ - \ — This mod allows specified token holders to redeem a designated token for a portion\ - \ of a Safe’s fungible assets.\n * Zodiac [Governor Mod](https://github.com/gnosis/zodiac-module-oz-governor)\ - \ — This makes Governor style DAOs Safe compatible, bringing the security and flexibility\ - \ of the Safe to the most popular on-chain governance method.\n * [MolochDAO](https://daohaus.substack.com/p/6991f40b-3931-47ff-bea3-fa6f9c365135?s=r)s\ - \ can now control Safes— DAOHaus made their minion contracts Zodiac compatible.\n\ - \n\n\nWith this treasury allocation, Gnosis Guild will continue to carry out needs-driven\ - \ development for GnosisDAO’s infrastructure, executing on emergent GIPs and DAO\ - \ requirements as we have demonstrated the past year. Furthermore, we will continue\ - \ to serve Gnosis Chain’s DAO ecosystem growth by expanding the Zodiac collection\ - \ of tools and the Zodiac Wiki. We will also continue our partnership with Karpatkey\ - \ to serve GnosisDAO’s treasury management.\n\nIn 2023/2024, Gnosis Guild plans\ - \ to complete its spin out from Gnosis Ltd/Gnosis Services GmbH, forming a separate\ - \ entity based on mutualistic ownership and decentralized governance. The Gnosis\ - \ Guild entity will continue with the same team, objectives, and values, executing\ - \ on this GIP and our symbiotic relationship with GnosisDAO. This grant will be\ - \ made to Gnosis Ltd., and once the spin out is complete all grant assets will be\ - \ transferred to the Gnosis Guild entity.\n\n## Specification\n\n[Gnosis Guild\ - \ Treasury Budget 2023](https://docs.google.com/spreadsheets/d/1qyXGxCAk2GmiH4jz7tbtOIqNO6PBxghMQ3lsLZbMz7o/edit?usp=sharing)\n\ - \n## Rationale\n\nGnosis Guild’s chief priority in 2023 remains needs-driven development\ - \ for the GnosisDAO and other DAOs within or engaged by the Gnosis ecosystem, along\ - \ with expanding the suite of composable DAO tooling and mechanisms available for\ - \ the Ethereum and Gnosis ecosystems. Keeping that in mind, the Gnosis Guild treasury\ - \ allocation budget has the following categories with their rationale described\ - \ below:\n\nCore Contributors: This budget category refers to the salaries and token\ - \ plan for 15 full-time contributors with the following roles\n\n * 1 communications\ - \ and community role\n * 1 operations role\n * 1 business development role\n \ - \ * 12 engineering and product roles\n\n\n\nThe contributor incentivization plan\ - \ is intended to roughly double contributors’ salary, with an initial two-year cliff\ - \ followed by a rolling one-year holding period.\n\nStewards: This budget category\ - \ refers to the part-time payment for 2-4 “pod” roles to extend outreach, education,\ - \ and documentation of the Zodiac ecosystem, as well as assist with general community\ - \ and communications needs related to Gnosis Guild.\n\nBrand Design: This budget\ - \ category refers to contract-based payment for visual communications.\n\nGrants\ - \ Program: This budget category refers to the amount allocated to support initiatives\ - \ building on Zodiac and related DAO tooling.\n\nOps: This budget category refers\ - \ to operational costs related to administration, services, and subscriptions.\n\ - \nCultural Program: This budget category refers to what would traditionally be construed\ - \ as a marketing campaign. The cultural program is intended to further establish\ - \ Gnosis Guild’s reputation as a creative, editorial, and experimental team, while\ - \ seeking to meaningfully broaden discourse.\n\n16 Likes\n" -start: 1675037477 -end: null -state: - - phase-2 -author: 'Gnosis Guild - - status: Draft - - type: Funding - - created: 2023-01-30 - - - poll - - - Simple Summary - - The proposal will fund the Gnosis Guild’s operations for one year. T…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 3,823,575 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-79.yml b/public/GIPs/GIP-79.yml deleted file mode 100644 index 8b90d944..00000000 --- a/public/GIPs/GIP-79.yml +++ /dev/null @@ -1,79 +0,0 @@ -id: gip-79-should-pluser-integrate-gnosis-chain-in-mvp -gip_number: 79 -url: https://forum.gnosis.io/t/gip-79-should-pluser-integrate-gnosis-chain-in-mvp -title: Should Pluser integrate Gnosis Chain in MVP? -body: "## Authorization via Seed\n\nTo manage your wallet, you need to store your\ - \ seed phrase securely. The seed phrase is a complex way of authorization. If a\ - \ user loses their seed, they lose their account and assets.\n\n## One seed for\ - \ all devices\n\nUsers can’t control access between devices. If a user has lost\ - \ their device, they can not block it from the account. Whoever gains access to\ - \ the device can access the user’s account. Therefore, the only option is to create\ - \ a new wallet and withdraw all assets there as soon as possible.\n\n## Weak Security\n\ - \nCurrently, security is the responsibility of the user. If the user encounters\ - \ an insecure application, he may lose all his assets.\n\n## No 2FA\n\nIf a user\ - \ encounters a hacker attack, there is no two-factor authentication for defending\ - \ the user’s account.\n\n# Solution\n\n[![Solution](https://forum.gnosis.io/uploads/default/optimized/2X/c/cb407790c61959524e899ba727ef3fded266ac6f_2_690x388.png)\ - \ Solution1600×900 18.3 KB ](https://forum.gnosis.io/uploads/default/original/2X/c/cb407790c61959524e899ba727ef3fded266ac6f.png\ - \ \"Solution\")\n\nPluser is a single account for all web3 apps with authorization\ - \ via email, decentralized 2FA, device manager, and hack protection.\n\nThe user\ - \ can use any web3 application and not worry about security. We thought of everything\ - \ for them. Now they never lose their crypto, NFT, etc. Our solution is entirely\ - \ decentralized, convenient, and secure. It consists of several parts.\n\n## Authorization\ - \ via email\n\nUsers create an account and recover access to an account using email\ - \ and password. It’s simple, and users will never lose access to their accounts.\n\ - \n## Device manager\n\nUsers can manage access for each device. If a user loses\ - \ their device, they can revoke access.\n\n## Hack Protection\n\nIf a user uses\ - \ an unsafe web3 app, Pluser will notify the user about it and block this app.\n\ - \n## Decentralized 2FA\n\nIf hackers attack a user’s account, 2FA will protect\ - \ it.\n\n# Web2/Web3\n\nPluser is a simple and secure way to use web3 applications.\ - \ It’s like **Google Account/Apple ID** but in web3.\n\n[![Web2/Web3](https://forum.gnosis.io/uploads/default/optimized/2X/7/7a0b24043224dc6bcb64eea67157a03b6ee7a057_2_690x388.png)\ - \ Web2/Web31600×900 36.1 KB ](https://forum.gnosis.io/uploads/default/original/2X/7/7a0b24043224dc6bcb64eea67157a03b6ee7a057.png\ - \ \"Web2/Web3\")\n\n# Easy to use\n\n[![1. Create an account via email](https://forum.gnosis.io/uploads/default/optimized/2X/1/1b13a325655d7d2193cfc3c0d48304d13abe1540_2_690x388.png)\ - \ 1\\. Create an account via email1600×900 41.8 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/1b13a325655d7d2193cfc3c0d48304d13abe1540.png\ - \ \"1. Create an account via email\")\n\n[![2. Choose an application in dAppStore](https://forum.gnosis.io/uploads/default/optimized/2X/1/1536ea14556de9279acdcfb86192e2413dbb3245_2_690x388.jpeg)\ - \ 2\\. Choose an application in dAppStore1600×900 165 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/1536ea14556de9279acdcfb86192e2413dbb3245.jpeg\ - \ \"2. Choose an application in dAppStore\")\n\n[![3. Don't worry about security.\ - \ Pluser will protect you.](https://forum.gnosis.io/uploads/default/optimized/2X/f/f9038e184063b037b45c783ec8a709d2be04942d_2_690x388.png)\ - \ 3\\. Don't worry about security. Pluser will protect you.1600×900 195 KB ](https://forum.gnosis.io/uploads/default/original/2X/f/f9038e184063b037b45c783ec8a709d2be04942d.png\ - \ \"3. Don't worry about security. Pluser will protect you.\")\n\n# Market\ - \ Validation\n\n[![Market Validation](https://forum.gnosis.io/uploads/default/optimized/2X/7/7edb9196612ea2c6d0feb842ed907c62f462d928_2_690x388.png)\ - \ Market Validation1600×900 36.3 KB ](https://forum.gnosis.io/uploads/default/original/2X/7/7edb9196612ea2c6d0feb842ed907c62f462d928.png\ - \ \"Market Validation\")\n\n# Comparison\n\n### Terminology:\n\n * **Easy/Complicated**\ - \ \\- Degree of difficulty for a user to create an account and gain access.\n\n\ - \ * **Safe/Unsafe** \\- How much a user needs to think about security and keeping\ - \ access to the wallet.\n\n\n\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/1/15bc77d52364c7e8704ebe05a0439b5adce86aaf_2_690x388.png)\ - \ Comparison1600×900 65.9 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/15bc77d52364c7e8704ebe05a0439b5adce86aaf.png\ - \ \"Comparison\")\n\n# Roadmap\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/0/0140a43e5807c50cdbb2d4df09be0458721c6c5b_2_690x388.jpeg)\ - \ Comparison1600×900 139 KB ](https://forum.gnosis.io/uploads/default/original/2X/0/0140a43e5807c50cdbb2d4df09be0458721c6c5b.jpeg\ - \ \"Comparison\")\n\n# Team\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/6/69eeb8f65f6938f67ec4dadba15e7b33a373e201_2_690x429.jpeg)\ - \ Comparison2386×1486 409 KB ](https://forum.gnosis.io/uploads/default/original/2X/6/69eeb8f65f6938f67ec4dadba15e7b33a373e201.jpeg\ - \ \"Comparison\")\n\n# Grant\n\nWe want to get a $50,000 grant or SAFE investments\ - \ from GnosisDAO. This money will be spent on maintaining the team and developing\ - \ the MVP. Pluser can make the experience of using Gnosis Chain easier and safer.\ - \ It will also help onboarding users from web2.\n\n## GnosisDAO Snapshot\n\n_Phase\ - \ 2 Proposals: Please ignore this section, and leave as is. It is used for Phase\ - \ 3 proposals. \nPhase 3 Proposals: Add a link to the corresponding GnosisDAO Snapshot\ - \ poll you’ve created._\n\n2 Likes\n" -start: 1676552440 -end: null -state: - - phase-2 -author: "elshan.eth\nstatus: phase-2\ntype: Funding\ncreated: 2023-02-16\n\n\nSummary\n\ - \ \nAbout $2 billion we…" -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-8.yml b/public/GIPs/GIP-8.yml deleted file mode 100644 index 4a25ad00..00000000 --- a/public/GIPs/GIP-8.yml +++ /dev/null @@ -1,77 +0,0 @@ -id: gip-8-enable-lp-token-voting-on-snapshot -gip_number: 8 -url: https://forum.gnosis.io/t/gip-8-enable-lp-token-voting-on-snapshot -title: Enable LP token voting on Snapshot -body: "* Add one LP token voting strategy\n * Add two LP token voting strategies\n\ - \ * Add no LP token voting strategy\n\n\n\n0 voters\n\n# **Which LP token voting\ - \ strategy should be added to Snapshot?**\n\n * Balancer\n * Uniswap\n * SushiSwap\n\ - \n\n\n0 voters\n \n \n GIP: 8\n title: Enable LP token voting on Snapshot\ - \ \n author: Anna George\n status: Draft\n type: Meta\n created: 2021-03-10\n\ - \ \n\nThis is a continuation of the [original post](https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902)\ - \ by [@StefanGeorge](/u/stefangeorge), moving it to phase 2 as the proposal was\ - \ well perceived in the Forum discussion and the technical requirements for implementation\ - \ have been set up in the meantime.\n\n**Tl;dr:**\n\nCurrently, the GnosisDAO Snapshot\ - \ setup does not allow for LP token voting. This forces GNO token holders to decide\ - \ between liquidity provisioning and governance participation.\n\nThis proposal\ - \ suggests adding a LP token voting strategy to the Gnosis Snapshot space. Please\ - \ vote on a) whether you want one / two / no strategy to be added to Snapshot, and\ - \ b) which strategy/ies you would like to have added.\n\n**The Proposal:**\n\nGNO\ - \ locked up in liquidity pools can currently not be used for voting on Gnosis Snapshot\ - \ proposals. This creates a tradeoff for GNO token holders: they can either earn\ - \ yields OR participate in governance decisions. This is concerning for two reasons:\n\ - \n 1. Liquidity providers – usually long term holders – are taking a risk to ensure\ - \ the token remains liquid on the market, enabling new community members to join\ - \ by buying GNO without large slippage. They are providing a service that helps\ - \ the GNO community and should not be punished with having no voting rights.\n \ - \ 2. As briefly touched upon above, it’s in the GnosisDAO’s interest to have large\ - \ liquidity of GNO. Striving for increased liquidity whilst not allowing for LP\ - \ token voting poses a conflict of interest: \nThe more capital is “locked up”\ - \ in liquidity pools without voting being enabled, the less likely it is that GnosisDAO\ - \ votes will meet the required threshold for proposals to pass.\n\n\n\nAt present,\ - \ a large amount of GNO is already used for liquidity provisioning, demonstrating\ - \ the relevance of this proposal:\n\n * 32M in [Balancer](https://pools.balancer.exchange/#/explore?token=0x6810e776880C02933D47DB1b9fc05908e5386b96)\n\ - \ * 8M in [Uniswap](https://info.uniswap.org/pair/0x3e8468f66d30fc99f745481d4b383f89861702c6)\n\ - \ * 0.7M in [Sushiswap](https://app.sushi.com/pair/0x41328fdba556c8c969418ccccb077b7b8d932aa5)\n\ - \n\n\nWhile the Snapshot team developed [strategies](https://snapshot.page/#/strategies)\ - \ that enable LP token voting for all major AMMs, the UI limits the amount of strategies\ - \ that can be deployed to four. As the Gnosis Space already has two strategies enabled\ - \ (‘GNO balance’ and ‘Delegated GNO balance’), only up to two LP token voting strategies\ - \ could be added at this point. There are some arguments in favour of only adding\ - \ one new strategy for the time being in order to keep at least one strategy open\ - \ for future use cases.\n\nThe full list of potential LP token voting strategies\ - \ that are currently relevant to GNO & enabled by Snapshot is added as answer options\ - \ in the poll above. Please decide on which - if any - strategy you would like to\ - \ see enabled in the Gnosis Snapshot space. To review the discussion that has evolved\ - \ since December please check the original post [here](https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902).\n\ - \n3 Likes\n\n[Should GnosisDAO allow to use GNO locked in balancer pools for voting\ - \ in snapshot proposals?](http://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902/24)\n\ - \n[GIP-28: Allow GNO holders to vote even if their GNO are invested/staked/locked\ - \ in Smart Contracts in different protocols/networks](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/9)\n\ - \n[GIP-28: Allow GNO holders to vote even if their GNO are invested/staked/locked\ - \ in Smart Contracts in different protocols/networks](http://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/2)\n" -start: 1615380566 -end: null -state: - - phase-2 -author: 'Anna George - - status: Draft - - type: …' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-80.yml b/public/GIPs/GIP-80.yml deleted file mode 100644 index 94cd2412..00000000 --- a/public/GIPs/GIP-80.yml +++ /dev/null @@ -1,176 +0,0 @@ -id: '0xf89c08d03b294e6e891f1f3d74d903e77f364002fde64e9dd463e280c60189a9' -gip_number: '80' -url: https://snapshot.org/#/gnosis.eth/proposal/0xf89c08d03b294e6e891f1f3d74d903e77f364002fde64e9dd463e280c60189a9 -title: Should GnosisDAO fund p2panda's off-chain solution for secure group encryption? -body: "Forum URL: https://forum.gnosis.io/t/gip-80-should-gnosisdao-fund-p2pandas-off-chain-solution-for-secure-group-encryption/6541\n\ - \n## Category\n\nFunding - Rewards\n\n## Executive Summary\n\nHello Gnosis community!\n\ - \nWe would like to realize a prototype for a decentralized, off-chain, encrypted\ - \ group chat where Ethereum addresses can serve as the receiver's identifiers.\n\ - \nTo achieve this we want to improve and build on top of the [Messaging Layer Security\ - \ Protocol](https://messaginglayersecurity.rocks) (MLS) and the [p2panda](https://p2panda.org/)\ - \ protocol. This technology fills a need in the Gnosis community for a generic and\ - \ encrypted off-chain data layer.\n\nThis technology fills a need in the Gnosis\ - \ community for a generic and encrypted off-chain data layer. The group chat will\ - \ also be a proof of concept and template for future applications serving the Gnosis\ - \ community using the same infrastructure.\n\n## Specification\n\n[p2panda](https://p2panda.org/)\ - \ is a new protocol and ecosystem for building decentralised applications with authenticated\ - \ and encrypted data which is automatically stored and synced between computers.\n\ - \nSome of the building blocks of p2panda are a permission system, conflict-free\ - \ replicated data types, multi-key identities, data schemas, multi-writer documents,\ - \ local deletion, sparse replication, dynamic GraphQL queries, hybrid network topologies\ - \ and more.\n\nWhile p2panda aims at being a low-barrier framework to enter the\ - \ p2p space without worrying too much about the technical challenges coming with\ - \ it, we also want to offer a toolbox to build radical applications which work locally,\ - \ offline and both in the browser and on low-energy devices like a smartphone or\ - \ embedded computer.\n\nData is encrypted with the help of the MLS protocol providing\ - \ Double-Ratchet-based group encryption. MLS assures Post-Compromise Security (PCS)\ - \ and Forward Secrecy (FS) and still stays performant for large groups. While MLS\ - \ is capable of working in a decentralised environment it hasn't been explicitly\ - \ specified for it. With p2panda we have all the building blocks to realize MLS\ - \ in a fully decentralised setting.\n\nFor all of this to play nicely together,\ - \ the following implementation steps are planned:\n\n### Secret Groups\n\n_Secret\ - \ Groups_ is the data schema that p2panda uses to handle data encryption for groups\ - \ in a decentralised setting and it builds on MLS as its underlying layer.\n\np2panda\ - \ already contains a low-level API for MLS that we implemented as a precursor for\ - \ the more high-level _Secret Groups_. This low-level API supports two basic usage\ - \ scenarios: Double-Ratchet-based encryption (the MLS default) and a so called \"\ - Long Term Secret\" encryption on top of that. The latter allows group members to\ - \ still decrypt past data after entering the group, which is practical for building\ - \ applications like Wikis. Double-Ratchet-based encryption offers Forward Secrecy\ - \ instead (FS), which can be used for secure chat applications and other use cases\ - \ where new group members should not access past data.\n\nThe next step will be\ - \ building an elegant high-level API that makes this system easily accessible for\ - \ developers that want to integrate _Secret Groups_ in their applications. This\ - \ involves additions to our GraphQL API, p2panda's built-in data schemas and replication\ - \ data format, which are all part of our core protocol specification.\n\n**Further\ - \ Links**\n\n- \"OpenMLS\" MLS implementation in Rust which is used by p2panda:\ - \ https://github.com/openmls/openmls\n- MLS integration in p2panda: https://github.com/p2panda/p2panda/tree/main/p2panda-rs/src/secret_group\n\ - - Draft \"Secret Group\" specification in p2panda: https://p2panda.org/specification/encryption\n\ - \n### Rust and TypeScript libraries\n\nDevelopers will use our Rust and TypeScript\ - \ libraries to integrate p2panda in their applications.\n\nTo persist MLS group\ - \ state we will implement interfaces for some known storage backends developers\ - \ can choose from (SQL, IndexedDB, LocalStorage). To account for forks of diverging\ - \ group state (due to network fragmentation) we need to extend our persistence system\ - \ with an additional layer. This layer keeps past group states for a while to be\ - \ able to decrypt messages from \"forked\" group states. This temporarily weakens\ - \ Forward Secrecy the more fragmented the group state gets.\n\n**Further Links**\n\ - \n- MLS specification (Version 9 February 2023) addressing forked group states:\ - \ https://messaginglayersecurity.rocks/mls-protocol/draft-ietf-mls-protocol.html#section-14\n\ - - OpenMLS Rust crate allowing handling past group epochs w. `max_past_epochs` option:\ - \ https://openmls.tech/book/user_manual/group_config.html\n- Diagram: Handling concurrent\ - \ updates in Secret Groups: https://whimsical.com/concurrent-updates-in-secret-groups-MZdGMKmMJ25zxrDAzuoXGG\n\ - - `p2panda-rs` Rust crate: https://crates.io/crates/p2panda-rs\n- `p2panda-js` npm\ - \ package: https://www.npmjs.com/package/p2panda-js\n\n### Key Groups\n\nThe MLS\ - \ specification does not have a concept of \"moderators\" or \"administrators\"\ - \ in a group. Theoretically all members of the group can mutate its state. p2panda\ - \ _Key Groups_ are a permission layer on top of MLS which allows for decentralised\ - \ permission handling of multi-writer data. Next to permissions they also enable\ - \ multi-device identities.\n\nAs part of this effort we will create an implementation\ - \ of our specification of the _Key Groups_ system, which will be able to model a\ - \ permission system on top of any encrypted group.\n\n**Further Links**\n\n- Draft\ - \ \"Key Group\" specification: https://p2panda.org/specification/authorisation\n\ - \n### External Keys\n\np2panda uses Ed25519 as the Digital Signature Algorithm.\ - \ To allow other DSAs we need to implement a _handshake_ process where external\ - \ identity systems such as an Ethereum key can authorise an MLS group member. This\ - \ will involve adding another data schema to p2panda.\n\n**Further Links**\n\n-\ - \ Diagram: External keys in p2panda: https://whimsical.com/digital-signature-algorithms-EgAkzR7mVDj4BQb7xySahh\n\ - - Schema specification: https://p2panda.org/specification/data-types/schemas#system-and-application-schemas\n\ - \n### POC: Group chat in Circles client\n\nAs a proof-of-concept (POC) we will integrate\ - \ p2panda with MLS into an existing Ethereum application in the Gnosis community.\ - \ Since our team partly consists of the original developers of the Circles ecosystem\ - \ we want to use the current Circles web client to show how Ethereum addresses (Gnosis\ - \ Safe contracts) can be used as receiver addresses for an encrypted MLS chat group.\n\ - \n* Users can associate their Gnosis Safe address (\"Circles profile\") with a p2panda\ - \ key\n* Users can create and manage groups to communicate with a set of other Safe\ - \ addresses\n* Users can access their chats from all of their devices simultaneously\n\ - \n**Further Links**\n\n- Circles website: https://joincircles.net/\n- Circles client:\ - \ https://circles.garden/\n\n### Security Audit\n\nThe OpenMLS team which partly\ - \ consists of the IETF standard editors consulted us already with the correct integration\ - \ of MLS into p2panda. We will continue with this collaboration. To verify our work\ - \ and gather feedback we want to work with Least Authority for a security audit.\ - \ \n\n- OpenMLS: https://openmls.tech/\n- Least Authority: https://leastauthority.com/\n\ - \n## Rationale\n\nScaleable data encryption for large groups in a decentralised\ - \ network is hard and has always involved a trade-off between UX and security. We\ - \ believe that MLS is the first [Internet Engineering Task Force (IETF) standard](https://datatracker.ietf.org/wg/mls/about/)\ - \ to tackle some of these challenges. p2p applications of all kinds, for example\ - \ the Gnosis Safe Apps, will benefit from an off-chain protocol that gives them\ - \ a distributed, strongly encrypted database stack.\n\nOne goal of p2panda's protocol\ - \ design has been enabling both usage from native apps, independent of a stable\ - \ connection to the internet, and immediate access from a plain web browser, without\ - \ having to install any additional software. Additionally, p2panda keeps data portable\ - \ instead of locking it to a specific application or server. Our design works in\ - \ both federated network topologies and fully decentralised systems, both of which\ - \ can be configured depending on the needs of the software and the communities that\ - \ are operating it.\n\nEthereum addresses (EOA and Contract account, for example\ - \ of a Gnosis Safe) are ideal identifiers for applications like a distributed messaging\ - \ platform. They are already established in the community, simplify onboarding and\ - \ enable cross-validation of identities through previous usage of those keys. Protocols\ - \ with centralised registries like PGP/GPG failed here and we believe that Ethereum\ - \ addresses that are native to decentralised networks are much more suitable for\ - \ this task. We want to enable any holder of an Ethereum key to bring their identity\ - \ and access additional tools for the community.\n\n## Budget\n\n- 172.800 DAI -\ - \ Salary for 3x half-time developers over ~12 months (8h / day, 3 days / week, 48\ - \ weeks, 50 DAI / hour)\n- 10.000 DAI - Security Audit Fee\n- 5.000 DAI - Administration\n\ - - 12.200 DAI - Contingency\n\nTotal: 200.000 DAI\n\n## Milestones\n\n**Proposed\ - \ timeline:** 12 months\n\n**Final goal:** Implementation and realisation of specified\ - \ items (see \"Specification\" above)\n\n**Timeline and Success metrics**\n\n- Phase\ - \ 1 - Research & Specification\n Success Metrics - Publicly published Secret Group,\ - \ Key Group and External Keys specification on p2panda.org website and GitHub repository\n\ - \ Time and Price Estimate - 2 month, 28.800 DAI\n- Phase 2 - Implementation Secret\ - \ Groups\n Success Metrics - `p2panda-js` package release on npm with Secret Group\ - \ encryption API and storage provider API\n Time and Price Estimate - 3 months,\ - \ 43.200 DAI\n- Phase 3 - Implementation Key Groups\n Success Metrics - `p2panda-rs`\ - \ crate release on crates.io with Key Group data types. `aquadoggo` node implementation\ - \ release on crates.io handling key groups in materialization logic\n Time and\ - \ Price Estimate - 3 months, 43.200 DAI\n- Phase 4 - Implementation External Keys\n\ - \ Success Metrics - Package release on npm (either `p2panda-js` or external package)\ - \ with External Keys feature\n Time and Price Estimate - 1 month 14.400 DAI\n-\ - \ Phase 5 - POC: Circles Chat\n Success Metrics - Release of encrypted Group-Chat\ - \ in Circles Wallet (either in official circles.garden Website or fork)\n Time\ - \ and Price Estimate - 1 month 14.400 DAI\n- Phase 6 - Security Audit\n Success\ - \ Metrics - Shared results of audit in p2panda GitHub repository, report on required\ - \ refactorings / changes in codebase\n Time and Price Estimate - 1 month 10.000\ - \ DAI (audit) + 14.400 DAI (development)\n- Phase 7 - Documentation + Tutorials\n\ - \ Success Metrics - Published tutorials on how to use Secret Groups, Key Groups\ - \ and External Keys feature on p2panda.org website\n Time and Price Estimate -\ - \ 1 month 14.400 DAI\n\n## Evaluation\n\nA security audit and implementation of\ - \ a POC in a widely-used context like Circles will evaluate the success of this\ - \ undertaking.\n\n## Team & Organisation \n\np2panda is a not-for-profit organisation\ - \ founded in 2021 with the mission to bring an easy to use but radical p2p stack\ - \ to app developers. We received the NGI Pointer grant in 2021/22 and NGI Assure\ - \ in 2022/23.\n\nThe team behind p2panda are experts in p2p, Rust and TypeScript\ - \ development. The founding members are:\n- [adz](https://github.com/adzialocha/)\ - \ has been the core developer next to [isthisa](https://isthisa.com/) developing\ - \ the first version of the Circles UBI community currency, both of them founded\ - \ later the [bitspossessed](https://github.com/bitspossessed/) developer collective\ - \ which still maintains the Circles project\n- [sandreae](https://github.com/sandreae)\ - \ is a Rust developer with experience across the landscape of offline-first protocols\n\ - - [cafca](https://github.com/cafca) is part of the [Decent Patterns](https://decentpatterns.com/)\ - \ library team, currently working on the JavaScript SDK of ditto\n\n## Conclusion\n\ - \nSecure encryption for large groups is a complex problem which gets even harder\ - \ in a decentralised setting. With the new [Messaging Layer Security Protocol](https://messaginglayersecurity.rocks)\ - \ (MLS) and [p2panda](https://p2panda.org) as the decentralisation layer we want\ - \ to introduce a solution that can account for a range of community-, threat- and\ - \ networking models. At the same time we want to provide accessible and well-documented\ - \ APIs for developers to easily build their solutions on top." -start: 1680256800 -end: 1680861600 -state: closed -author: '0xe661830067591344F10E165Fd75bCDa8D041bdD0' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 1192.985292607802 -scores: - - 200.25708236414337 - - 675.314024711218 - - 317.414185532441 -votes: 655 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-81.yml b/public/GIPs/GIP-81.yml deleted file mode 100644 index 40c9b3c1..00000000 --- a/public/GIPs/GIP-81.yml +++ /dev/null @@ -1,62 +0,0 @@ -id: '0x36072c476d6f213336b52fd267f2b229cfc4218316cd43a6146592d270c49170' -gip_number: '81' -url: https://snapshot.org/#/gnosis.eth/proposal/0x36072c476d6f213336b52fd267f2b229cfc4218316cd43a6146592d270c49170 -title: Should GnosisDAO fund CirclesUBI Indonesia’s product testing launch? -body: 'After discussion with GnosisDAO, CirclesUBI.id is submitting a revised proposal - to fund Milestone 1 associated with the product testing and participant onboarding - in Bali, Indonesia. - - - CirclesUBU.id will receive €500,000 once the GIP passes in order to hit Milestone - 1 of 1500 participants in product testing across 17 villages. - - - Here’s the definition of onboarded participants: - - - 1. Onboarding of Field Officers/Local Champions. - - a) +20 people successfully follow a training program, and pass screening to ensure - they can support their communities + conduct effective troubleshooting & survey - interviews during 3 months of the roll out period. - - b) These 20 people ensure 1500 participants are successfully onboarded. - - - 2. Onboarding of Testing Participants (users). - - a) 1500 participants have successfully attended the user onboarding workshop and - understand how to use their Circles account, have created their circles user account - + a shop account that is visible on the circles marketplace. - - - 3. Active participants (retention rate). - - a) # of users that conduct at least 1 translation per week and participate in feedback - interviews about the product performance and benefits. - - 4. Inactive participants. - - a) Are not actively using the app at least 1 x per week, and participate in feedback - interviews aimed to determine what the reasons are that they are not using the app.' -start: 1682451673 -end: 1683056473 -state: closed -author: '0xB922a0a797026D5C45145503E1976989B05Cf307' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 89771.96730297993 -scores: - - 89710.90429065353 - - 22.846480184020127 - - 38.21653214236081 -votes: 309 -quorum: 0 -funding: - amount: 500,000 - currency: € - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-82.yml b/public/GIPs/GIP-82.yml deleted file mode 100644 index 35110896..00000000 --- a/public/GIPs/GIP-82.yml +++ /dev/null @@ -1,173 +0,0 @@ -id: '0x753224fa15a96ccd14044906e67270e49076e7b2282eb57fe816648426f26e93' -gip_number: '82' -url: https://snapshot.org/#/gnosis.eth/proposal/0x753224fa15a96ccd14044906e67270e49076e7b2282eb57fe816648426f26e93 -title: Should GnosisDAO co-fund a community owned forest / land art project (terra0)? -body: "## Summary\nThis proposal seeks Gnosis DAO to become a sponsor and partner\ - \ that would partially fund terra0 to support the development of a novel large-scale\ - \ art project in Germany that focuses on community-land stewardship managed by a\ - \ DAO. The project will expand the use cases of the Gnosis ecosystem by using Gnosis\ - \ infrastructure (Safe, Gnosis Chain, Zodiac) to manage and restore a forest over\ - \ an indefinite time period. The artistic development is being supported by Light\ - \ Art Space (LAS), a German art foundation focused on art, science, and technology\ - \ and will culminate in a large-scale exhibition in Berlin (3-6 months), allowing\ - \ for a broad, diverse, and non-native audience to be exposed to Gnosis and Web3.\n\ - \nIn parallel, terra0 will produce a legal framework allowing for the integration\ - \ of a Gnosis Safe with the formation of a German Verein. As part of this proposal,\ - \ terra0 will develop and provide tools to integrate Gnosis Safes with this framework\ - \ and use the project to establish an inaugural precedent.\n\nterra0 seeks 195,000\ - \ € from Gnosis DAO to help realize this ambitious project (~ 18.2% of 1,071,000\ - \ € total project budget). The grant from Gnosis would help fund the purchase of\ - \ a plot of land containing a forest in Germany and lay the groundwork for the legal\ - \ framework and application of a DAO as a Verein for a Gnosis Safe. With this funding\ - \ Gnosis DAO will:\n\nSponsor the terra0 land art project and be featured on exhibition\ - \ material, resulting in increased publicity, visibility, and user base for Gnosis,\ - \ Gnosis Chain, and Gnosis Safe within a new cultural sphere.\n\nSupport the development\ - \ of a new legal framework for DAOs resulting in a composable template engine for\ - \ Gnosis Safes which allows DAOs to be registered as a Verein in Germany, thereby\ - \ creating new real-life applications for DAOs built on Gnosis tools.\n\nReceive\ - \ an allocation of the tokens associated with the upcoming terra0 land art project\ - \ and DAO. We also see Gnosis DAO as a key community member and participant in the\ - \ project.\n\n## Background\nterra0 is a group of developers, artists, and researchers\ - \ who have been creating artworks and prototyping decentralized applications since\ - \ 2016. Through technical experimentation, artistic exploration, and stress-testing\ - \ legal frameworks related to natural resources, terra0 creates technological-augmented\ - \ ecosystems and questions the contemporary representation of the living environment.\ - \ In this final version of the project, realized for the first time on the scale\ - \ of an entire forest in Germany, terra0 will develop a framework for the collaborative\ - \ management of shared resources and explore alternative, non-exploitative valuations\ - \ of nature. terra0 plans to instantiate a DAO to cooperatively organize the restoration\ - \ of the ecosystem using bio-markers oriented towards greater biodiversity and resistance\ - \ to environmental pressures.\n\nPrevious terra0 works and prototypes can be seen\ - \ on our website. They have been exhibited and discussed at the 58th Carnegie International,\ - \ the 17th Architecture Biennial Venice, Canadian Centre for Architecture Montreal,\ - \ The Shed New York City, Kunsthalle Zürich, Francisco Carolinum Linz, Chronus Art\ - \ Center Shanghai, Furtherfield Gallery London, Schinkel Pavillon Berlin, and Vienna\ - \ Biennale, among others.\n\n## Motivation\nIt’s no secret that we are in the midst\ - \ of an ecological crisis spurred on, in large part, by excessive resource use and\ - \ extraction. In the West, our relationship with the environment has been defined\ - \ for centuries by land’s productive value, which has led to gross ecological mismanagement\ - \ and destabilization. terra0 seeks to re-orient this relationship towards intrinsic\ - \ ecological value by applying Web3 principles of decentralized collective governance,\ - \ communal ownership of public goods, and automated digital mediation in service\ - \ of environmental resilience and autonomy. The development of decentralized programmable\ - \ systems for exchanging value is giving rise to code and community-based digital\ - \ organizational structures that enable democratic control of property. Novel ecological\ - \ collectives such as those proposed by terra0 could distribute decision rights\ - \ based on immanent bio-regional agency, relationships, and proximal metrics.\n\n\ - ## Rationale\nAs a collective, terra0 has been experimenting for years with Gnosis\ - \ Safe as infrastructure for treasury management and as a trust anchor. Historically,\ - \ we see Gnosis Chain and community as a place where DAO experiments happen; one\ - \ we believe provides essential DAO infrastructure for the projects, affordable\ - \ txs, and a community that cares deeply about its development. Gnosis’ commitment\ - \ to open standards whose design philosophy is one of expandability, inclusivity,\ - \ and composability aligns with the terra0 ethos of experimenting with novel forms\ - \ of governance and communities centered around ecological commons.\n\nThe proposed\ - \ art project is of value to the Gnosis community as it engages a diverse audience\ - \ and is participatory in nature — pairing ecological narratives with a concrete\ - \ implementation of DAO governance. This includes visitors of the exhibition, online\ - \ DAO members, local stakeholders, an international art audience, and experts from\ - \ various fields. When combined with the timescale, exhibition, and participatory\ - \ nature of the terra0 land art project, presents a unique opportunity to engage\ - \ an audience that would not normally be accessible while increasing the capability\ - \ and usage of the Gnosis ecosystem and Gnosis Chain. The land and forest will function\ - \ as a permanent land art installation and be accompanied by an internationally\ - \ recognized and large-scale public exhibition organized by LAS in Berlin over the\ - \ period of 3-6 months — which may travel to other locations in the future. This\ - \ connection has the potential to enhance the public perception of Gnosis: applied\ - \ ecology and community governance have rarely been publicly discussed and tested\ - \ on such a scale.\n\nAdditionally, the application and implementation of mapping\ - \ a Verein onto a DAO will enhance how it can be perceived in a legal context —\ - \ one we hope will set a precedent that will allow for its legality to be recognized\ - \ in other locals, contexts, and jurisdictions while featuring Gnosis Chain and\ - \ tools as key components. Although the legal definition and context of a Verein\ - \ is unique to Germany, once incorporated, it allows for international members to\ - \ join the organization — therefore not only being bound to the members residing\ - \ in Germany (except seven core members). The possibility to integrate DAOs into\ - \ a concrete legal structure using the Verein is an important building block for\ - \ our project and enables real-world use cases in areas such as environmental protection\ - \ and restoration.\n\n## Implementation\nThe land art project will be developed\ - \ over the next year, in this process terra0 will purchase a plot of land containing\ - \ a forest (10-20 hectares) in nearby proximity to Berlin, instantiate a DAO to\ - \ augment the ecological agency of the ecosystem, and transfer the ownership of\ - \ the land to it. The DAO governs the token systems, enforces the sovereignty of\ - \ the underlying ecosystem, and mediates human oriented relations. The secondary\ - \ function of the DAO is that of providing a social space, thus contributing to\ - \ the stimulation of work groups and educational initiatives relating to ecology\ - \ and technology. Many visitors and potential DAO participants will have little\ - \ experience with blockchain and Web3 — and will interact and be exposed to Gnosis\ - \ Chain and ecosystem for the first time. Through a special statute and voting mechanism\ - \ of the association which locks the ownership in the DAO, it also serves as a permanent\ - \ protector of the piece of land against disposal and reintegration into economic\ - \ dependence and exploitation.\n\nDuring the production period and exhibition terra0\ - \ and LAS will host a series of workshops and events to on-board and orient the\ - \ community into the DAO. Gnosis DAO will receive a proportional amount of tokens\ - \ relative to the proposed funding to participate in the terra0 land art project\ - \ — one that we see as a key member when engaging in a long-term project about the\ - \ evolution of legal structures pertaining to DAOs and ecological management.\n\n\ - The exhibition component of the terra0 land art project will be exhibited with LAS.\ - \ Previous exhibitions produced by LAS can be viewed here 1. In recent exhibitions,\ - \ LAS received approximately 25 000 – 30 000 visitors for the duration, an average\ - \ of 600-800 visitors a day. Additional coverage of 60 – 100 media outlets enabled\ - \ the exhibition’s themes to be brought to the forefront of international discourse.\n\ - \nFor the land art project to be successful, the DAO requires a legal structure\ - \ to hold and administer property (land) according to German law. We are currently\ - \ working with legal teams to define a Gnosis Safe as the managing tool for a Verein\ - \ under German jurisdiction. This framework will allow for the fluid recognition\ - \ of token holders (as addresses) to be viewed as legal members of an organization\ - \ at the time of voting without any additional registration.\n\n#### Two aspects\ - \ are to be particularly emphasized:\n1. The legal membership in the Verein will\ - \ be defined only by a membership token, the associated address, and will not require\ - \ the registration of identity through KYC (with the exception of seven registered\ - \ members, which is a condition for each Verein in Germany).\n\n2. Votes which take\ - \ place with the help of the associated voting methods (such as Governor mod) to\ - \ be legally defined by the association rules as “continuous association meetings.”\n\ - \nIf these two aspects are laid out in an association regulation, the Gnosis Safe\ - \ can be legally integrated into a Verein without any additional infrastructure.\ - \ The development period will be followed by an initial implementation and prototype\ - \ of this legal structure that will be deployed as the framework for the DAO in\ - \ conjunction with the land art project and exhibition.\n\nFollowing this, terra0\ - \ will create a web and Gnosis Safe app (this could take the form as something similar\ - \ to KALI with increased functionality) with a DAO template engine that will allow\ - \ and enable a DAO to be incorporated under German law as a Verein. The app will\ - \ facilitate the deployment of a Gnosis Safe, create the legal documents required\ - \ for the registration of the Verein under German law, and will use the Gnosis Safe\ - \ and associated voting method.\n\n## Milestones & timeline\n### 2023\n- May–June:\ - \ Completion of the legal framework and formation of the legal entity (= proof of\ - \ concept [Payment #1 for the acquisition of the forest (175,000€) to the Verein]\n\ - - June–July: Acquisition of the forest\n- June–March 2024: Technical development\ - \ of the DAO structure, ecological survey, assemble advisory board, …\n- July–August:\ - \ Development of the template engine for Gnosis safe [Payment #2 (20,000€) for the\ - \ legal research and implementation of the template engine]\n\n### 2024\n- January–May:\ - \ Community building\n- February–April: Exhibition building\n- April: Allocation\ - \ of tokens to funding partners\n- May: Exhibition/DAO opening + NFT sale\n- May–June:\ - \ Public program\n\n## Relevant links:\n\n#### Link to Gnosis Forum thread:\n- https://forum.gnosis.io/t/gip-82-should-gnosisdao-co-fund-a-community-owned-forest-land-art-project-terra0/6570\n\ - \n#### Background information / press:\n- Website: [terra0.org](https://terra0.org/)\n\ - - Light Art Space: [lightartspace.org](https://lightartspace.org/)\n- Budget: \ - \ [Gnosis Proposal Budget .xlsx](https://docs.google.com/spreadsheets/d/1McYyWCZlCsCNXzaqsLBjVErt9gOdtGnv/edit?usp=sharing&ouid=101530439550121892891&rtpof=true&sd=true)\n\ - - [Simon Denny & terra0 / outland.art](https://outland.art/simon-denny-terra0/)\n\ - - [terra0’s Self-Governing Forests / frieze.com](https://www.frieze.com/article/terra0-profile-2023)\n\ - - [This tree owns itself—and is fighting for its own survival / fastcompany.com\ - \ ](https://www.fastcompany.com/90738287/this-tree-owns-itself-and-is-fighting-for-its-own-survival)\n\ - \ \n![TERRAO-PIC-1024x683.jpg](ipfs://bafybeifplcv6x3dvrp3xlbbubao7qfuo5wgcga5kklfowtqdjovp72z5ue)\n\ - \ " -start: 1681464600 -end: 1682069400 -state: closed -author: '0x70e095FB47e10e696bf40d759B3656d273C76DDC' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 518.8016342385218 -scores: - - 390.0262793816968 - - 122.37719500329231 - - 6.3981598535326984 -votes: 329 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-83.yml b/public/GIPs/GIP-83.yml deleted file mode 100644 index 557d9384..00000000 --- a/public/GIPs/GIP-83.yml +++ /dev/null @@ -1,109 +0,0 @@ -id: '0x9ddbd422d2bf3aee2ff225a62e7576843b26118ffa9de2f1cf08dc7da0ee0203' -gip_number: '83' -url: https://snapshot.org/#/gnosis.eth/proposal/0x9ddbd422d2bf3aee2ff225a62e7576843b26118ffa9de2f1cf08dc7da0ee0203 -title: Should GnosisDAO fund decentralized alternatives of Gnosis Chain pruned and - archival RPC endpoints from Pocket Network f -body: "https://forum.gnosis.io/t/gip-83-should-gnosisdao-fund-decentralized-alternatives-of-gnosis-chain-pruned-and-archival-rpc-endpoints-from-pocket-network-for-18-months\ - \ \n\nService Agreement for Decentralized RPC Access of Gnosis Chain through the\ - \ Pocket Network protocol\n\nCategory\n\nService Agreements - Decentralized Gnosis\ - \ Chain Public RPCs powered by Pocket Network\n\nExecutive Summary\n\nPocket Network\ - \ is a decentralized, middleware protocol focused on the RPC layer. Its goal is\ - \ to provide blockchain application developers with a privacy-preserving, multi-chain\ - \ gateway on top of the Pocket Network protocol that allows dapp developers to mint\ - \ reliable, fast RPC endpoints for the 40+ blockchain networks supported, including\ - \ both Gnosis Chain pruned and Gnosis Chain archival.\n\nFor example, over the last\ - \ month, Gnosis Chain has carved the number 3 spot in terms of requests per day\ - \ at ~130.6M daily average requests through Pocket Network according to POKTscan!\n\ - \nAfter speaking with stakeholders on both sides of the aisle, Pocket Network Inc\ - \ has been encouraged to publish this new Gnosis Improvement Proposal without the\ - \ retroactive funding aspect. The previous years of service are a gift to the Gnosis\ - \ community of users, developers, applications, and protocols. Thank you for the\ - \ opportunity to demonstrate Pocket Network’s value proposition as the most redundant,\ - \ reliable, multi-chain RPC layer by taking on additional traffic during Dark Forest\ - \ rounds and the xDAI to Gnosis Chain transition (to name a few past examples).\n\ - \nGnosis and Pocket stakeholders favor an 18-month service contract to fund continued\ - \ access to decentralized RPC alternatives for both Gnosis Chain pruned and Gnosis\ - \ Chain archival. It will allow GnosisDAO to steward this public good together with\ - \ Pocket Network!\n\nBy funding a pokt-powered Public Gnosis Chain RPC endpoint,\ - \ GnosisDAO and Pocket Network would continue to contribute to the decentralization,\ - \ increased resiliency, and censorship-resistance of the Gnosis Chain network. All\ - \ the while, continuing to incentivize Gnosis Chain node runners with $POKT tokens\ - \ for serving Gnosis dapps.\n\nService Description\n\nPocket Network Inc. staked\ - \ POKT on behalf of the GnosisDAO to subsidize a public good in the form of public\ - \ RPC endpoints (available in the Gnosis Chain docs) without rate limits:\n\n1.\ - \ https://gnosischain-rpc.gateway.pokt.network/\n2. https://gnosischain-archival-rpc.gateway.pokt.network/\n\ - \nThe current set of Gnosis Relay Chain IDs (RCIs) Pocket Network supports are:\n\ - \n1. Gnosis Chain pruned = 0027 (mainnet)\n2. Gnosis Chain archival = 000C (mainnet)\n\ - \nThe POKTdao allowlisted Gnosis Chain (0027) on 07/06/21, with Gnosis Chain Archival\ - \ (000C) shortly after on 08/26/21).\n\nSince the allowlist date, Pocket node operators\ - \ earned 55.6M POKT from servicing over 38.9B Gnosis Chain mainnet read/write requests.\ - \ See this spreadsheet for a breakdown of relays drive and POKT earned.\n\nOver\ - \ that time, these Gnosis RCIs developed to become one of the more populated, stable,\ - \ and higher-performant pools of nodes. Pocket’s network of node runners easily\ - \ handled several spikes, including a big spike to 243.6M requests on a single day\ - \ recently in JAN 2023.\n\nOver the last year or so, Pocket Network has been serving\ - \ 100M+ requests per day with an excellent average response time of ~150ms with\ - \ success rates above 99% across all Pocket Portal regions. Moreso, in the Asia-Pacific\ - \ region (most used region by Gnosis) the response times are as low as 40ms (lower\ - \ = better & faster).\n \n![gip83 regions.png](ipfs://bafkreiff3yj5qgk2fk36gikhd33ep5rwmix2e2qipdw7eugx57wdnv3nm4)\n\ - \ \nAccording to POKTscan, there are currently 20,596 Pocket Service Nodes pointing\ - \ to Gnosis Full Nodes for the 0027 Relay Chain ID and 2,695 Pocket Service Nodes\ - \ pointing to Gnosis Archive Nodes for the 000C Relay Chain ID.\n\nThis demonstrates\ - \ the POKT node incentives at work!\n\nThe POKTdao has also supported node deployment\ - \ solutions through funding grants such as Node Pilot and DappNode to make it super\ - \ easy to spin up and monetize Gnosis full/archival nodes within the Pocket Network\ - \ protocol.\n\nService Scope and Service Delivery\n\nPocket Network agrees to these\ - \ milestones and deliverables:\n \n![gip83 milestones and deliverables.PNG](ipfs://bafkreiepfbfuhoyabcev64xp65pgiwo6v5th5f5hsctijf276xwl53mlbq)\n\ - \ \nSupport\n\nThe GnosisDAO will be able to monitor and manage the public RPCs\ - \ through our Pocket Portal as they see fit, including the ability to enable additional\ - \ security features such as allowlisting user-agents, origins, smart contracts,\ - \ and methods.\n \n![gip83 portal security settings.png](ipfs://bafkreie2bbe6fiz6ykrjppbgac2sfwyznna53svdjf2rrmg764cn5n54km)\n\ - \ \nThe GnosisDAO and Gnosis Chain users are able to submit support tickets through\ - \ this link.\n\nPricing and Payment\n\nPocket Network has simplified their model\ - \ this year to mirror a traditional SaaS-like tiered structure, which is much more\ - \ affordable. To sweeten the deal, Pocket is offering the Gnosis DAO team and community\ - \ a massive discount on a 150M requests per day at $0.0000020 throughput an 18-month\ - \ commitment with the option to renew:\n\n$164,250 USD for 150M Requests Per Day\ - \ on a 18-month contract\n\nThat represents 3.65x in yearly savings (a 365% discount)\ - \ compared to the original offer!\n\nPayment Schedule\t\nPayment Dates\tAmount Due\n\ - Upon Proposal Passing (50%) = $82,125 USD\nUpon Milestone Completion (50%) = $82,125\ - \ USD\nTotal (100%) = $164,250 USD\n\nPNI prefers payment in stablecoins, such as\ - \ USDC or DAI, at this provided address from Pocket Network, Inc. → 0x5F1Feefc4BB7a414096cCF070BeEF94da8Ff88A6\n\ - \nIn case a buffer is wanted/needed, as traffic continues to grow, PNI would like\ - \ to extend another option to purchase additional bandwidth at the discounted price\ - \ of $0.0000018640 per request throughout the contract period.\n\nIf Pocket Network\ - \ Inc is unsuccessful in their proposal to secure funding, PNI will continue to\ - \ support the Gnosis Chain network; however, in an effort to do so sustainably,\ - \ PNI would introduce per-second rate limits on the Public RPC that would channel\ - \ users and developers to a paid tier in the Pocket Portal where costs would be\ - \ passed on directly to Gnosis builders/users outside the free tier of 250k requests\ - \ per day.\n\nService Terms and Exit Strategy\n\nContact the sales team at Pocket\ - \ Network, Inc.\n\nTeam/Organization\n\nPocket Network, Inc.\n\nhttps://www.linkedin.com/company/pocket-network/\n\ - https://twitter.com/POKTnetwork\n\nConclusion\n\nA decentralized RPC protocol is\ - \ crucial for a blockchain that values decentralization such as Gnosis Chain.\n\n\ - Public RPCs are a public good, Pocket Network hopes to share in the responsibility\ - \ together with the GnosisDAO of maintaining these high-quality public goods on\ - \ behalf of Gnosis Chain users. The Pocket Network team and community have been\ - \ a long-time supporters of the Gnosis Chain.\n\nWe’re proud to continue supporting\ - \ Gnosis!" -start: 1679946726 -end: 1680551526 -state: closed -author: '0xa48168C3D73De7B4Fed96383E2BeF8e53443A263' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 16076.036619040271 -scores: - - 15867.747897788451 - - 66.16909919735816 - - 142.1196220544605 -votes: 585 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-84.yml b/public/GIPs/GIP-84.yml deleted file mode 100644 index 940d65fc..00000000 --- a/public/GIPs/GIP-84.yml +++ /dev/null @@ -1,104 +0,0 @@ -id: gip-84-introducing-gip-guards-on-chain-financial-controllers-for-gips -gip_number: 84 -url: https://forum.gnosis.io/t/gip-84-introducing-gip-guards-on-chain-financial-controllers-for-gips -title: On-chain financial controllers for GIPs -body: "#### [lukasschor.eth | Safe](https://twitter.com/SchorLukas/status/1599373578469666816)\n\ - \n[@SchorLukas](https://twitter.com/SchorLukas/status/1599373578469666816)\n\nCongrats\ - \ to SafeGuard winning the main prize at [@ETHIndiaco](https://twitter.com/ETHIndiaco)\ - \ building a range of [@Safe](https://twitter.com/Safe) extensions such as deny\ - \ and allow list guards. \U0001F44F \n\n![](//forum.gnosis.io/uploads/default/optimized/2X/c/cbd8c7dbaeac897ec0444633d791c77790a133e0_2_690x393.jpeg)\n\ - \n[12:02 PM - 4 Dec 2022](https://twitter.com/SchorLukas/status/1599373578469666816)\ - \ 94 19 \n\n#### Category\n\nAdministrative\n\n#### Executive Summary\n\nSwitch\ - \ to Recovery-enabled GuardedSafes for all GIPs funded by the DAO to increase project\ - \ accountability and continued communication with the community.\n\n#### Terminology\ - \ used\n\n 1. **GIP-Guard** : A Transaction Guard designed for specific GIPs.\n\ - \n 2. **Milestone Payout Guard** : A GIP-Guard that only lets transactions be processed\ - \ from a Safe if the defined milestones have been met.\n\n 3. **GuardedSafe** :\ - \ A Safe with GIP-Guard added to it.\n\n 4. **Recovery-enabled GuardedSafe** :\ - \ A GuardedSafe with a recovery module added to it allowing GnosisDAO to recover\ - \ funds if they feel the team is underperforming.\n\n\n\n\n#### Introduction\n\n\ - GIPs have been instrumental in Gnosis ecosystem growth. Most GIPs are funded upfront\ - \ however, there is limited information available after funding. Milestones are\ - \ untracked, project updates are sparse and their status is unknown. There is no\ - \ easy way to analyse the impact of the project, learn from them, or know if the\ - \ project is still active. Moreover, if the team becomes unresponsive, the funded\ - \ amount sits idle in their wallet with no way to recover for the DAO.\n\nSome examples\ - \ of this we have seen are:\n\n 1. GIP-61: Bootnode received $580k to contribute\ - \ to the development and maintenance of bridges in the Gnosis ecosystem, Circles\ - \ Infrastructure, Running Gnosis beacon chain validators, and long-term DAO growth.\ - \ They promised bi-weekly status updates and reports on project progress. However,\ - \ over the last 8 months, only 1 update has been provided.\n 2. GIP-18: Tick-DAO\ - \ received $750k from Gnosis DAO. There have been no updates to the community after\ - \ the proposal has passed. The project even changed its name to Quiver Alpha, with\ - \ no updates to the Gnosis community.\n\n\n\nBeing a GIP with multiple scopes of\ - \ work there needs to be more transparency in how the funds are being used, milestone\ - \ progress and how far the roadmap has been executed.\n\n#### Proposed Changes\n\ - \nWe propose transitioning to **Recovery-enabled GuardedSafes** for all GIPs funded\ - \ by the DAO. These on-chain financial controllers have a **Milestone Payout Guard**\ - \ that only lets transactions be processed from the Safe if the defined milestones\ - \ have been met.\n\nFor each GIP, the community along with the builder team decides\ - \ on certain milestones that need to be met by a particular point in time. For each\ - \ of these milestones, the community appoints some milestone reviewers. These reviewers\ - \ will be responsible for verifying the status of the pre-defined milestones. If\ - \ the milestones are met, the reviewers mark the milestone as completed. Now, only\ - \ when all reviewers mark a milestone as completed can transactions from the Safe\ - \ be processed. In all others cases, it will revert.\n\n#### Impact and Benefits\n\ - \nSince the GIP has milestones already defined in the proposal, this **Milestone\ - \ Payout Guard** would ensure that the community is informed and the project is\ - \ motivated to stay on track. These milestones can be as subjective and tailored\ - \ to each project. It could include community calls, writing blogs or conducting\ - \ workshops could be set.\n\nWith **Recovery-enabled GuardedSafes** , the GnosisDAO\ - \ could recover funds upwards of $500k after seeing that the project was dormant\ - \ and lacked progress.\n\nThese **GuardedSafes** nudge projects with funds to keep\ - \ moving in the right direction while ensuring the community has some control if\ - \ things don’t go according to plan.\n\n#### Implementation Plan\n\nDuring the\ - \ proposal discussion (Phase 2), the exact milestones and rubrics need to be ratified,\ - \ following which, a **Recovery-enabled GuardedSafe** will be created.\n\nThis includes\ - \ two aspects:\n\n * **Milestone Payout Guard** : This is the **GIP-Guard** that\ - \ will be added to the Safe that the builder receives money in and lets the builder\ - \ withdraw funds from the Safe only if they meet the milestones set earlier. The\ - \ milestones completion will be checked by a set of reviewers as explained above.\n\ - \ * **Recovery Module** : This module will also be added to the same Safe and will\ - \ grant GnosisDAO some admin privileges. It will let the DAO recover funds without\ - \ needing the signatures from the Safe owners in case the team goes dormant or abandons\ - \ the project and stops building.\n\n\n\nWe propose all GIPs going forward receive\ - \ funds through **Recovery-enabled GuardedSafes**.\n\nSafeGuard will provide technical\ - \ support or assistance when needed. We will also work with the community on fine-tuning\ - \ the Guard to each proposal.\n\n#### Risks and Challenges\n\nThe main challenge\ - \ with GIP-Guards is to ensure that the guards work properly under all circumstances.\ - \ Transaction guards are smart contracts too and when dealing with financial matters,\ - \ it is of utmost importance that the contracts are secure. Hence, all of the GIP-Guards\ - \ will be throughly audited and only used after multiple rounds of testing.\n\n\ - #### Team/ Organization/References\n\nSafeGuard was one of the winners at ETH India\ - \ and is incubated and developed by [Questbook](https://questbook.app/).\n\nQuestbook\ - \ is a grant orchestration tool being used by Compound, Polygon, Optimism and Aave\ - \ to disburse more than $3mn in grants. The team has also built Open Quest and Zero\ - \ Wallet.\n\n2 Likes\n" -start: 1680093601 -end: null -state: - - phase-1 -author: 'Dayitva Goel (@Dayitva) - - status: Draft - - type: Funding - - cre…' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-85.yml b/public/GIPs/GIP-85.yml deleted file mode 100644 index b3ea4743..00000000 --- a/public/GIPs/GIP-85.yml +++ /dev/null @@ -1,85 +0,0 @@ -id: gip-85-gnosisdao-to-support-covalent-as-initially-mentioned-in-gip-16 -gip_number: 85 -url: https://forum.gnosis.io/t/gip-85-gnosisdao-to-support-covalent-as-initially-mentioned-in-gip-16 -title: GnosisDAO to support Covalent as initially mentioned in GIP 16 -body: "# GnosisDAO to support Covalent as initially mentioned in GIP-16\n\n * In\ - \ Favour\n * Against\n\n\n\n0 voters\n \n \n GIP: 85\n title: GnosisDAO\ - \ to support Covalent as initially mentioned in GIP 16\n author: Ryan Coree @coreeryan\ - \ & David Tso @davidtsocy \n status: Draft\n type: Funding\n created: 2023-04-19\n\ - \ funding: 50,000 USD\n \n\nDear GnosisDAO,\n\n[Covalent](https://www.covalenthq.com/docs/)\ - \ is a hosted blockchain data solution providing access to full historical and current\ - \ onchain data for 100+ supported chains, including Ethereum, Polygon, Arbitrum,\ - \ Optimism, Base, Linea, Scroll, Avalanche, Fantom, and more.\n\nCovalent Offers\ - \ 2 Products\n\n 1. Unified API: Covalent’s industry-leading Unified API is the\ - \ most robust set of API services available on the market today. Our Unified API\ - \ returns enriched blockchain data applicable to all blockchain networks, e.g. token\ - \ balances, transactions, log events, etc., enabling developers to build wallet\ - \ applications like Rainbow Wallet, NFT galleries like NFTX, investor dashboards\ - \ like CoinGecko, and taxation tools like Rotki. Over 3,000 applications and 35,000\ - \ active developers today rely on our Unified API, powering half a billion monthly\ - \ API calls.\n 2. Increment: Increment is a Business Intelligence (BI) platform\ - \ that empowers blockchain-based projects to understand their business metrics.\ - \ Built on our Unified API, Increment has the full historical data set for over\ - \ 100 chains. Increment is imbued with a standardized analytics framework – Reach\ - \ (for growing a user base), Retention (for retaining a user base), and Revenue\ - \ (for monetizing a user base). Increment also contains many more label tables for\ - \ NFTs and DeFi.\n\n\n\nProposal\n\n * As previously proposed in [GIP 16 - Gnosis\ - \ Chain - xDAI/Gnosis merge](https://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904)\ - \ by Martin Köppelmann, the Co-Founder of Gnosis: “Gnosis Chain will look to attract\ - \ core Ethereum infrastructure projects that are currently unavailable on the xDai\ - \ chain. Gnosis Chain will cover the costs associated with such deployments. Examples\ - \ include Etherscan, Beaconcha.in, Infura, Alchemy, Covalent…”\n * Covalent will\ - \ index Gnosis and integrate it with our Unified API and Increment for a compensation\ - \ of 50,000 USD, this will benefit developers and analysts who want to access Gnosis’\ - \ data.\n * Covalent will also create custom documentation for Gnosis and run a\ - \ technical webinar for the Gnosis community to onboard more developers and kickstart\ - \ novel use cases.\n\n\n\nCovalent Deliverables\n\n 1. Index Gnosis’ public blockchain\ - \ and support it through our Unified API and Increment\n 2. Dedicated documentation\ - \ page for developers\n 3. Prominent Gnosis logo on Covalent’s website\n 4. Emails\ - \ and relevant notifications to Covalent’s user base\n 5. Promotion of launch across\ - \ social media handles, Discord groups, Telegram, etc.\n\n\n\nGnosis Deliverables\n\ - \n 1. Vote for governance proposal\n 2. A joint social media announcement post-integration\n\ - \ 3. Inclusion of Covalent’s logo in Gnosis’ marketing materials, website, and\ - \ documentation\n\n\n\nThe end date will be one year from the agreement’s effective\ - \ date. The agreement may be extended based on mutual discussions between relevant\ - \ parties.\n\nGrant and Disbursement\n\n * The amount to be funded from the GnosisDAO\ - \ treasury to Covalent is 50,000 USD of Gnosis’ xDai native token. Once the governance\ - \ proposal is approved, the payment will be processed as one single transfer.\n\ - \ * The xDai/USD exchange rate for the disbursements is to be determined at the\ - \ time of the transfer.\n\n\n\nTestimonials\n\n“So far, Covalent has significantly\ - \ enhanced the developer experience on Fantom via their Unified API. It will no\ - \ doubt be a staple in how users access blockchain data.”\n\n– Michael Kong, CEO\ - \ at Fantom\n\n“Decentralized applications and services need fast and reliable access\ - \ to backend data to deliver seamless experiences competitive with Web 2.0. With\ - \ its Unified API for data across multiple chains, Covalent is well-positioned to\ - \ support the march toward mass adoption of Web3.”\n\n– John Nahas, SVP of Business\ - \ Development at Avalanche\n\n“Broader Web3 adoption requires great application\ - \ UX and performant access to backend data, but these have historically been constrained\ - \ by what the direct node RPCs are able to offer. Covalent’s unique approach not\ - \ only delivers performance but also access to an enriched multi-chain data set\ - \ via their Unified API. It’s a great fit for Moonbeam developers looking to create\ - \ next-generation multi-chain applications.”\n\n– Derek Yoo, CEO at Moonbeam\n\n\ - Conclusion\n\nThe Covalent team hopes that the GnosisDAO can see the value of this\ - \ partnership and pledge their support. Thank you!\n" -start: 1681929393 -end: null -state: - - phase-1 -author: "Ryan Coree @coreeryan & David Tso @davidtsocy \nstatus: Draft\ntype…" -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 50,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-86.yml b/public/GIPs/GIP-86.yml deleted file mode 100644 index bb3a8929..00000000 --- a/public/GIPs/GIP-86.yml +++ /dev/null @@ -1,57 +0,0 @@ -id: '0x0bed9b763f14d5374817c31a696cc8b4e03e1d157744c1ae3ed3ea81a1ec28a9' -gip_number: '86' -url: https://snapshot.org/#/gnosis.eth/proposal/0x0bed9b763f14d5374817c31a696cc8b4e03e1d157744c1ae3ed3ea81a1ec28a9 -title: Should the GnosisDAO commit to additional rETH usage in treasury operations? -body: 'Executive Summary - - - Gnosis DAO / Chain has decentralization as its core ethos, focusing on a distributed - validator set for the chain and an open DAO structure run by GNO holders. Despite - this, our Treasury has nearly all of its staked ETH assets sitting with LIDO as - stETH. Given the success of RocketPool Protocol in creating a massively decentralized - validator set through rETH and RPL, this proposal recommends that Gnosis DAO commit - to moving at least 50% of their stETH holdings to rETH holdings over time in order - to support Ethereum decentralization and reduce single protocol and “bad actor” - risk that comes from Lido’s limited node set (29 nodes vs Rocket Pool’s 2550 and - growing nodes). - - Introduction - - - As of last notice, the Gnosis Treasury (managed by Karpatkey) holds 64,124 wstETH - (~$130mm) and 5,725 stETH (~$10mm), 712 rETH (~$1.4mm), and 18,622 ETH. Full report - here: 20230424 - karpatkey’s Weekly Report on GnosisDAO Farms.pdf - Google Drive - 1 This concentrated holding of a centralized staking provider token is a risk to - Gnosis DAO and against the DAO’s core ethos of decentralization. This GIP is intended - to direct Karpatkey to move to reduce stETH dependency and introduce additional - rETH into their DeFi strategies in order to reduce risk to the DAO and provide support - to decentralized ethereum staking. - - Proposed Changes - - - The Gnosis DAO will instruct Karpatkey to reduce stETH dependency and increase staked - ETH diversity, but WILL NOT dictate how this is best accomplished. Karpatkey, once - instructed, will move forward with whatever strategies are in the best interest - of the DAO to reduce stETH exposure and provide additional usage of rETH / RocketPool' -start: 1684777713 -end: 1685382513 -state: closed -author: '0x756e9a772F87cC1B3c56E0b88f941BB3AeF0A81a' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 13654.690640959303 -scores: - - 13470.11920794947 - - 57.00257238971315 - - 127.5688606201184 -votes: 305 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-87-redo0.yml b/public/GIPs/GIP-87-redo0.yml deleted file mode 100644 index 6ea9d941..00000000 --- a/public/GIPs/GIP-87-redo0.yml +++ /dev/null @@ -1,75 +0,0 @@ -id: '0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f' -gip_number: '87' -url: https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f -title: Should GnosisDAO claim its vested GEL allocation and delegate it along with - COW to governance Safe managed by karpatkey? -body: "## Summary\nThis proposal triggers the Gnosis DAO Safe to claim the fully vested\ - \ GEL tokens from Gelato and then delegate the voting power of GEL and COW to the\ - \ governance Safe managed by karpatkey following GIP-58.\n\n## Motivation\n####\ - \ GEL\nFollowing Gelato’s community vote on accelerating the GEL vesting 1, GEL\ - \ tokens have been fully vested on the Gnosis DAO since the 27th of February, 2023.\n\ - \nHowever, these tokens are not being put to any use in the Gnosis ecosystem. By\ - \ enabling the Gnosis DAO to claim the vested GEL tokens and delegate their voting\ - \ power to the karpatkey’s governance Safe, we can ensure that these tokens are\ - \ contributing to shape the future of Gelato.\n\nkarpatkey has been managing the\ - \ Gnosis DAO treasury since GIP-20, having later extended the range of services\ - \ through GIP-58. Through our strong relationship with Gnosis DAO, we can actively\ - \ manage the voting power of GEL to benefit the Gnosis DAO. The complete amount\ - \ vested to Gnosis DAO is 5,258,625 GEL—and these are not intended to be sold.\n\ - \nThe claimable GEL amount would put Gnosis DAO in 9th place 3 of the current GEL\ - \ holders.\n\n#### COW\nFurthermore, the Gnosis DAO has access to 48.5MM COW voting\ - \ power on CoW DAO. This voting power consists of 47472327.585 vCOW and 1027672.415\ - \ COW.\n\nFor vCOW, Gnosis DAO currently has the second largest share of 14.35%,\ - \ and for COW, Gnosis DAO holds 0.1028% of the current circulating supply.\n\nkarpatkey\ - \ can also vote on the Gnosis DAO’s behalf and ensure the mutually beneficial growth\ - \ of both Gnosis DAO and CoW DAO as karpatkey has been working together with CoW\ - \ DAO since the creation of the Core Treasury Team (CIP-19 1).\n\n## Specification\n\ - The proposal includes the following steps:\n\nClaim first batch of vested GEL token:\ - \ 2,629,312 GEL\nClaim second batch of vested GEL token: 2,629,312 GEL\nDelegate\ - \ the voting power for GEL on Snapshot to karpatkey’s governance Safe eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\n\ - Delegate the voting power for COW on Snapshot to karpatkey’s governance Safe eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\n\ - \n## Implementation\nThe snapshot vote, if successful, will trigger two claims on\ - \ Gelato Governance Dashboard 4 and then delegate the voting power of GEL and COW\ - \ on snapshot to eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52, karpatkey’s governance\ - \ Safe.\n\n- Proposed .json for Snapshot:\n\n```json\n[\n {\n \"to\": \"0x4A7c7652aBd5E5e3467C458E42493630AAA7DDD6\"\ - ,\n \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"withdraw(address\ - \ receiver_, uint256 vestingId_, address to_, uint256 value_)\",\n \"params\"\ - : [\n \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"0\",\n \ - \ \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"2629312500000000000000000\"\ - \n ]\n },\n {\n \"to\": \"0x4A7c7652aBd5E5e3467C458E42493630AAA7DDD6\",\n\ - \ \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"withdraw(address\ - \ receiver_, uint256 vestingId_, address to_, uint256 value_)\",\n \"params\"\ - : [\n \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"1\",\n \ - \ \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"2629312500000000000000000\"\ - \n ]\n },\n {\n \"to\": \"0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446\",\n\ - \ \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"setDelegate(bytes32\ - \ id, address delegate)\",\n \"params\": [\n \"0x70697374616368696f64616f2e65746800000000000000000000000000000000\"\ - ,\n \"0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\"\n ]\n },\n {\n \"\ - to\": \"0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446\",\n \"operation\": 0,\n \ - \ \"value\": \"0\",\n \"method\": \"setDelegate(bytes32 id, address delegate)\"\ - ,\n \"params\": [\n \"0x636f772e65746800000000000000000000000000000000000000000000000000\"\ - ,\n \"0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\"\n ]\n }\n]\n```\n\n\ - ## References\n- [Transaction payload](https://gist.github.com/FreeHeadSpace/a945e9e4901f998ad8d2bf3140a634f1)\n\ - \n- [Tenderly Simulation](https://dashboard.tenderly.co/public/safe/safe-apps/simulator/30bd7a35-9c93-4d10-88f7-89dcb7ef6171)\n\ - \n- [Forum Discussion](https://forum.gnosis.io/t/gip-87-should-gnosisdao-claim-its-vested-gel-allocation-and-delegate-it-along-with-cow-to-governance-safe-managed-by-karpatkey/6961)" -start: 1686898740 -end: 1687503540 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 79179.90426951686 -scores: - - 79170.67397579648 - - 0.17851071599198093 - - 9.051783004376448 -votes: 363 -quorum: 0 -funding: - amount: 5,258,625 - currency: GEL - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-87.yml b/public/GIPs/GIP-87.yml deleted file mode 100644 index 92257ed2..00000000 --- a/public/GIPs/GIP-87.yml +++ /dev/null @@ -1,32 +0,0 @@ -id: '0xd15dc7f0fbc00d6c6c07e18f41c1a5dd54adad77b3dae6cb0d0111503f7fa0c7' -gip_number: '87' -url: https://snapshot.org/#/gnosis.eth/proposal/0xd15dc7f0fbc00d6c6c07e18f41c1a5dd54adad77b3dae6cb0d0111503f7fa0c7 -title: '[Redo]Should GnosisDAO claim its vested GEL allocation and delegate it along - with COW to governance Safe managed by...' -body: "# Summary\nThis is a redo of the proposal for [GIP-87](https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f)\ - \ as the attached transactions were not executed in time, and have subsequently\ - \ expired. \n\nThis procedural vote enables the payload from the successful proposal\ - \ to be executed. The original specifications remain unchanged and can be seen in\ - \ the approved [GIP-87](https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f\ - \ ) description." -start: 1699531200 -end: 1700136000 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 798720.7114761322 -scores: - - 55437.637047530334 - - 94.91241669654542 - - 743188.1620119056 -votes: 276 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-88.yml b/public/GIPs/GIP-88.yml deleted file mode 100644 index b2c0f5f8..00000000 --- a/public/GIPs/GIP-88.yml +++ /dev/null @@ -1,206 +0,0 @@ -id: '0xe1cc4813e19f2f62ee80cf337642b40617ce68e27582ba8c00ee5c9f96025146' -gip_number: '88' -url: https://snapshot.org/#/gnosis.eth/proposal/0xe1cc4813e19f2f62ee80cf337642b40617ce68e27582ba8c00ee5c9f96025146 -title: Should Gnosis Chain provide liquidity for Circles Group Currencies in collaboration - w/Proof of Humanity? -body: "http://forum.gnosis.io/t/gip-88-should-gnosis-chain-provide-liquidity-for-circles-group-currencies-in-collaboration-w-proof-of-humanity/6983\n\ - \nauthor: Julio Linares, Clément Lesaege \n\n\nExecutive Summary:\n\nCirclesUBI\ - \ is a dapp running on Gnosis Chain which distributes a Universal Basic Income (UBI)\ - \ via a P2P mesh credit protocol. Recently, a secondary issuance mechanism has been\ - \ developed, called Group Currencies, as a way to bridge Circles to state money\ - \ systems and crypto-assets. We propose that Gnosis Chain provides liquidity to\ - \ two specific group currencies: the BER group currency administered by the Circles\ - \ Coop e.G. and the Proof of Humanity (POH) group currency administered by the POH\ - \ Origin team. By partnering with projects like Monerium, the goal is to pave the\ - \ way to position Circles as a leading real world payment application that provides\ - \ a UBI to people worldwide, strengthening the Gnosis ecosystem. The total costs\ - \ of the project are 1,700,000 EUR for a period of one year from the moment the\ - \ proposal gets accepted by the Gnosis DAO.\n\nSpecification\n\nCircles (CRC) are\ - \ minted as personal currencies at a rate of roughly 1 CRC per 1 hour or 24 CRC\ - \ per day, with a yearly 7% demurrage on the money supply to incentivise circulation.\ - \ The current socially agreed exchange rate of CRC to e.g. Euros is roughly 10:1.\ - \ Group currencies are minted on a 1:1 basis, so that for each group currency minted,\ - \ one personal currency gets deposited and locked into a specific treasury. Group\ - \ currencies have three modes of issuance or minting:\n\n1. Only the owner can mint.\n\ - 2. Only the group can mint.\n3. Everyone can mint.\n\nIn order to test group currencies\ - \ at a larger scale, the following proposal seeks to grant the ability to exchange\ - \ Circles group currencies for the following groups:\n\n1. Proof of Humanity (Origin):\ - \ in order to establish a clear collaboration and integration between POH-Origin\ - \ and CirclesUBI, we propose a group currency that is used by POH-Origin users who\ - \ join the Circles POH group currency as part of their basic income distribution\ - \ system. POH is a sybil resistance registry that wants to use Circles group currency\ - \ for UBI distribution. We propose that Gnosis Chain commits to fund a total of\ - \ 500.000 EUR to bring liquidity onto their group currency (the liquidity will stay\ - \ owned by the Gnosis DAO). More information about POH's recent fork can be found\ - \ [here](https://gov.proofofhumanity.id/t/phase-3-binding-hip-74-a-peaceful-fork/2487).\ - \ Technically, the PoH system would have a group currency manager for the creation\ - \ of its Circles group currency. More details of that can be found [here](https://gist.github.com/AndreiMVP/63fe2376400ebb89ece633646aa8c625).\ - \ For more technical information you can find a GitHub repository for the POH GC,\ - \ which includes a README, [here](https://github.com/Proof-Of-Humanity/group-currency)\ - \ Additionally, [here](https://hackmd.io/@andreimvp/pohgct-guide) you can read a\ - \ more in-depth presentation/ testing guide for the PoH Group Currency. We believe\ - \ strong synergies can come from this collaboration between Circles and Proof of\ - \ Humanity (Origin) in the space, both powered by Gnosis chain.\n\n2. [Circles Coop](http://circles.coop/)\ - \ eG: as part of the ongoing Berlin Open Pilot, the Circles Coop provides Euros\ - \ in exchange for CRC that businesses accept in return for goods and services as\ - \ a way of increasing fungibility of CRC and incentivising local trade, enabling\ - \ a people-powered, bottom-up basic income. You can see more about the work of the\ - \ Circles Coop [here](https://vimeo.com/769402776). An analysis of the Berlin network\ - \ (December 2022) by the NetFi team at [Freiburg Institute of Basic Income Studies](https://www.fribis.uni-freiburg.de/en/fribis/)\ - \ can be accessed [here](https://docs.google.com/document/d/1husreoJz3HQq9_C0LXRMiGRoC_hL5Uvxds9UwzTeeoI/edit?usp=sharing)\ - \ (using novel network science methods).\n\nBER Exchange\n\nNow that we have established\ - \ an active economic network in Berlin with over 2000 individual participants and\ - \ 20 merchant partners, the goal of the Circles Coop for the next year is to leverage\ - \ BER to create a sustainable community-driven investment environment for small\ - \ and medium businesses within the circles network in order to expand the basic\ - \ income economy. The group currency administered by the Circles Coop will be called\ - \ \"BER'', after Berlin. The BER will be backed by production of goods and services\ - \ coming from business sales in CRC. For the first years, we envision BER will be\ - \ issued as a service by the Circles Coop based on the CRC that businesses in the\ - \ network send to the Coop on a 1:1 basis. The Circles Coop will maintain a list\ - \ of trustees or people who commit to give labour, capital or land to the network\ - \ for the issuance of BER and other trade partners of the B2B network. After more\ - \ knowledge and experience is gathered from the workings of BER on the Circles'\ - \ web of trust, the Coop will begin to experiment with distributing group issuance\ - \ rules to the wider economic network.\n\n* BER will be sold for Euro-e to community\ - \ investors at a discount.\n* Euro-e will be given to the businesses in the Berlin\ - \ network either as direct zero/low interest loans or as part of the ongoing pilot\ - \ program.\n* Community investors can use BER to buy goods and services or sell\ - \ BER back for Euro-e at a fixed rate. This means that for the first year businesses\ - \ can only access BER through their own sales or by buying/selling BER with Euro-e\ - \ from other businesses or community investors.\n\nCo-payment API & Multi-Token\ - \ Display:\n\nIn order to do this, our aim is to make it easier for people and businesses\ - \ to co-pay with their CRC & BER by enabling Euros-e payments and multi-token display\ - \ of balances. The Circles Coop will leverage [Monerium](https://monerium.com/)’s\ - \ Euro-e stable coin, running on Gnosis, to develop a product that allows businesses\ - \ to withdraw and deposit Euro-e tokens to and from their [circles.garden](https://circles.garden/)\ - \ safe wallet. Monerium is a SEPA authorised and regulated Euro stable coin. Users\ - \ of Circles will be able to open a Monerium account with an IBAN to deposit Euro-e\ - \ tokens to their Circles safe in order to use the open co-payment API functionality\ - \ that we will develop. Businesses can sell things at a discount in Euros and benefit\ - \ from higher sales experienced from participating in the Circles network. The Euro-e\ - \ fee revenues generated are transparent and can be split as distributed equity\ - \ for Circles users within the web of trust, for the pilot business costs and to\ - \ cover the Coop's operational costs in order to break even. The end result is fully\ - \ distributed credit issuance and internal liquidity provision made possible by\ - \ the Circles mesh credit p2p protocol and distributed equity through the revenues\ - \ generated from trade and investments to real production in the form of co-payment\ - \ fees & community investment in BER.\n\nThe proposal would be to fund the Circles\ - \ Coop with 1.2 million EUR from the moment this proposal becomes effective for\ - \ a period of 12 months to:\n\n* develop the co-payment API functionality in the\ - \ [circles.garden](https://circles.garden/) client and [marketplace](https://market.joincircles.net/en)\ - \ with Euro-e and BER\n* Enable Euro-e, BER & CRC multi-token displays.\n* develop\ - \ the BER/Euro-e exchange functionality for the Berlin pilot (500k EUR)\n* Research\ - \ & Development (see below)\n\nPart of this budget will be assigned by the Circles\ - \ Coop to the [Bitspossessed](https://bitspossessed.org/) developer collective (600k).\ - \ The Bitspossessed have been responsible for maintaining and developing the core\ - \ Circles UBI infrastructure and client (circles.garden) since [Sarah Friend](https://isthisa.com/)\ - \ and [Andreas Dzialocha](https://adz.garden/) co-founded the Bitspossessed after\ - \ technicaly launching CirclesUBI in October 2020, with the unconditional support\ - \ from [Martin Koppelmann](https://twitter.com/koeppelmann). As the Circles Protocol\ - \ is non-for-profit and meant to be a commons, the project relies on grants and\ - \ public/private donations for its operations at scale. Having a budget for core\ - \ development secured by the GnosisDAO will ensure the continued success of the\ - \ project and group currencies as a whole. The Circles Coop's operational non-development\ - \ costs will be secured by external private donations while the revenues generated\ - \ from BER and co-payments are established, tested and proven to work. The Circles\ - \ Coop aims to develop an open reproducible revenue model that allows other organised\ - \ cooperatives, businesses and groups doing Circles to earn a revenue and break-even\ - \ from fees in Euro-e/fiat co-payments, fiat withdrawals and deposits and group\ - \ currency exchange fees.\n\nOur end goal and vision for the future is to develop\ - \ a multi-currency p2p privacy-preserving payment app that brings investment for\ - \ local economies to thrive everywhere via CirclesUBI.\n\nThe Circles Coop eG commits\ - \ to sharing the progress, main learnings and achievements in Q3 of 2024 before\ - \ applying to further funding from the GnosisDAO community.\n\nFrom mid 2024 to\ - \ 2025, our aim is to develop with others in the ecosystem a Community Currency\ - \ Exchange as a stand-alone product to decentralise and incentivise investment in\ - \ group currencies in a privacy-preserving way. You can read more about the Circles\ - \ Coop [here](https://circles.coop/) and about our recent work on anonymous circles\ - \ or the Circles [Entropy Black Paper](https://circlesentropy.github.io/blackpaper/).\n\ - \nResearch\n\nIn order to understand better what the different risk profiles and\ - \ trade-offs of group currencies will be, we would like to include a budget to fund\ - \ the research work of BlockScience and Circles Coop Research team, who will work\ - \ in understanding and modelling what effects will the introduction of group currencies\ - \ have on the Circles web of trust network as a whole, providing a \"digital twin\"\ - \ of Circles with the capacity to perform deterministic backtesting and to perform\ - \ extrapolation under stylized scenarios. One of the product outcomes of research\ - \ is to determine, using network science, when an account is a real person or not\ - \ and create the necessary metrics and detection mechanisms for sybil resistance.\ - \ To that end, we request a total of 100k EUR to fund the great work of [Blockscience](https://block.science/)\ - \ and the Circles Coop research team for a period of six months.\n\nTimeline for\ - \ Circles Coop:\n\nResearch and Design (3 months): includes market research, design\ - \ research, design work on ideation, mock-ups for new features, user stories, risk\ - \ management on legal and economic fronts, network science and agent based modelling\ - \ research, fine tuning business model, ongoing maintenance, stabilisation and improvement\ - \ of technical infrastructure. Additionally, here we will review and do an audit\ - \ of the group currency contracts to make sure everything is secure before deployment.\n\ - \nDecision-Making and Planning Implementation (1 month): Systematize and cross-analyze\ - \ all the information gathered. Establish a common roadmap in all domains to implement\ - \ agreed features, prepare campaigns for general users, improve Coop's BER minting\ - \ and EUR redeeming procedures, start with design research for [marketplace](http://www.market.joincircles.net)\ - \ integration, ongoing maintenance and stabilisation of technological infrastructure.\n\ - \nFeatures Development and Implementation Phase 1 (3-4 months): Launch campaign\ - \ to prepare users for new features. Work on the feature of multi-token display\ - \ to start users getting used to this possibility, preparing circles.garden backend\ - \ and marketplace for co-payment API. Test, adjust and launch first features. Design\ - \ processes and platforms for community investment. Prepare a communication campaign\ - \ to reach out to community investors. Ongoing maintenance and stabilisation of\ - \ technological infrastructure. \n\nFeatures Development and Implementation Phase\ - \ 2 (3-4 months): Developing, testing and launching co-payment API features both\ - \ on circles.garden and the marketplace. Campaign to introduce co-payment and start\ - \ introducing economic justice/social investment narrative. Ongoing maintenance\ - \ and stabilisation of technological infrastructure. Lastly, work will go into research\ - \ and design of a currency exchange platform for Q3 2024.\n\nMilestones: \n\nQ1:\ - \ first stage of Group Currency research completed, GC contract audits fully done.\ - \ \n\nQ2: Design of features and workflows of GC \n partially completed. Architecture\ - \ & spec for payment API defined. \n\nQ3: Design of features and workflows of GC\ - \ completed. Testnet goes live to begin testing features and assumptions. Second\ - \ stage of research completed. \n\nQ4: Group Currency and co-payments implemented\ - \ on the circles.garden wallet and marketplace \n\n\n Budget\n\nTo summarise, the\ - \ breakdown of the total budget of this proposal will be assigned as follows:\n\n\ - To Proof of Humanity Origin Team:\n\n* 500k EUR for POH group currency. This liquidity\ - \ belongs to GnosisDAO and will go to the users of POH directly. The idea is to\ - \ provide liquidity on PHC (Proof of Humanity Circles). The money will be used to\ - \ build a liquidity position of DAI-PHC.\nSince there wouldn't be any liquidity\ - \ initially, the POH team will need to buy it overtime to avoid slippage, for around\ - \ 50k€ of PHC over 5 months.\nThe POH team can handle those operations and then\ - \ send the liquidity tokens to the GnosisDAO.\nGiving the exact operations may be\ - \ hard as price of PHC may vary.\n\nProof of Humanity's Gnosis Chain Safe: 0x636a9f58182B8132A08777A8De0Ca0f63bc0C3aa\n\ - \nTo Circles Coop e.G.:\n\n- 100k EUR for Research collaboration with Blockscience\ - \ and the Circles Coop Research team (July 2023 to June 2024). Paid in DAI or USDC.\n\ - \n- 600k EUR for the Bitspossessed CirclesUBI Dev Team (July 2023 to June 2024).\ - \ Paid in DAI or USDC.\n\nBerlin CirclesUBI Pilot:\n\n* 500k EUR for BER Pilot -\ - \ as a commitment to exchange the Group currency (BER) for DAI or USDC. This liquidity\ - \ belongs to GnosisDAO and will go to the businesses in the pilot directly. The\ - \ BER minted will be sent to the Gnosis Treasury team in exchange for the stable\ - \ coin at a fixed rate of ~10 BER to 1 Euro with a small discounted exchange fee\ - \ as incentives for merchants. In the future proposals to GnosisDAO, we plan to\ - \ create a social dex (community currency exchange) to allow for different forms\ - \ of mutual staking, direct loans to the B2B network and more, in order to make\ - \ the operation economically sustainable.\n\nCircles Coop's Gnosis Chain Safe: 0xd9B58990cef69c2d222fD8f8CAf53477C5B79E28\n\ - \nTotal:\n\n1.7 million EUR for a period of one year.\n\nA more detailed cost breakdown\ - \ is given [here](https://docs.google.com/spreadsheets/d/1ORy9d2pw7IJoub05s5MuVLBD3kRyUqpQmJnMG1KhdR4/edit#gid=1813060761).\ - \ \n\nFunding should be given for the respective team public addresses present in\ - \ this proposal.\n\nWe look forward to our collaboration.\n\nCircles Coop e.G &\ - \ Proof of Humanity Origin" -start: 1688964263 -end: 1689569063 -state: closed -author: '0x04B86C77271B97EF30AEc9eFB5d4cbC805144a7A' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 56025.21448664428 -scores: - - 29007.3067727236 - - 27001.41504120799 - - 16.492672712679905 -votes: 338 -quorum: 0 -funding: - amount: 1,700,000 - currency: EUR - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-89.yml b/public/GIPs/GIP-89.yml deleted file mode 100644 index 37b2cd81..00000000 --- a/public/GIPs/GIP-89.yml +++ /dev/null @@ -1,156 +0,0 @@ -id: '0x68d88244f7f1f10d15441a4894ff77ba595dbbed645b2ce0718604b14b96526a' -gip_number: '89' -url: https://snapshot.org/#/gnosis.eth/proposal/0x68d88244f7f1f10d15441a4894ff77ba595dbbed645b2ce0718604b14b96526a -title: Should GnosisDAO support an annual renewal for Blockscout SLA and hosting services? -body: 'Blockscout continues to serve the Gnosis ecosystem with an open-source explorer - for both the Gnosis mainnet and Chiado testnet instances. Blockscout hosting was - originally funded in GIP 54 for mainnet and GIP 71 for the Chiado testnet. - - - Over the past year, Blockscout has attracted and retained Gnosis users and developers, - providing a valuable explorer option and needed redundancy for chain exploration. - While Gnosis mainnet users can choose Gnosisscan or Blockscout for their exploration, - contract verification, and API needs, Blockscout is currently the only full-featured - explorer serving the Chiado execution layer. - - - While Blockscout usage is down somewhat from its peak when it was the only explorer - option for the chain, many users still prefer Blockscout. A few high level statistics - from GA & Mixpanel: - - - ~45K monthly views, 9.5K MAU for Gnosis Mainnet Blockscout instance. - - ~100 contracts verified in the previous month using Blockscout. - - ~1,000 signups to myAccount since the feature was introduced. - - ~550 Marketplace views over the previous month. - - ~7K monthly views for Chiado. - - Additional chain stats (not instance specific) are available at Gnosis chain statistics - | Blockscout. - - - Over the past year Blockscout has focused on optimizations and improvements which - have been upstreamed to the Gnosis instances on a priority basis. These include - a complete UI overhaul, multiple indexer upgrades, advanced statistics and the new - MyAccount and Dapp Marketplace features. - - - Updates scheduled for the upcoming year include: - - - Advanced filtering and sorting options - - Human readable transactions - - NFT views and explorer improvements - - Smart search with AI - - More Rust-based microservices - - Support for ENS and ENS forks - - - Project Deliverables - - - Continue to maintain Blockscout instances for Gnosis Chain and Chiado testnet on - Blockscout’s premises - - Hosting services for the Gnosis Chain and Chiado testnet (for a period of 1 year - with an option to extend) - - Hosting at blockscout.com (for a period of 1 year with an option to extend) - - Premium feature updates - - Priority SLA to ensure uptime and troubleshoot any issues with Gnosis development - team - - Support for end-users of the explorer managed via Discord - - - Execution Timeline - - - Start time - - - Proposed start time for the renewal is October 1, 2023. - - - Previous services for the hosted mainnet instance began on July 17, 2022 and officially - expired on July 18, 2023 (per GIP 54) . Since that time we have hosted the mainnet - instance at our own cost. We propose crediting 2 weeks (July 18-July 31) and receiving - back payments for 2 months (August and September) of hosting services in addition - to the new annual engagement cost. - - Previous payment for the Chiado testnet was received on November 29, 2022 and scheduled - to extend through Nov 29, 2023. We propose reducing the time for this support by - 2 months, so that the new engagement can begin and end at the same time as mainnet. - - New proposed timeline: Gnosis Mainnet and Chiado testnet will be supported from - October 1, 2023 - October 1, 2024. - - If the proposal is still in consideration on Oct 1 but no final decision has been - made, hosting and support will continue without interruption until the governance - process is completed, and the timeline will be amended accordingly. - - - Funding & Disbursement - - - Hosting costs cover high-capacity bandwidth, infrastructure upgrades, data storage - (2000GiB and growing), and devops for the networks. Feature enhancements and priority - support are also included as part of the package. - - - Over the past year we have analyzed instance usage and optimized our backend infrastructure - and processes, and are happy to offer a discount on pricing for the instances ($500 - less per month relative to 2022 pricing). Chiado testnet pricing is scoped as a - 2nd instance, resulting in a lower cost. - - - Gnosis Chain Mainnet: $112,000.00 - - - $8,000 per month for 14 months (August and September 2023 + 1 year of service 1 - October, 2023 - 1 October, 2024) - - Chiado Testnet: $40,000 - - - $4,000 per month for 10 months (credit of October and November 2023 + 1 year of - service 1 October, 2023 - 1 October, 2024) - - Total cost: $152,000.00 due 1 October, 2023 - - - Amount is requested up front for the year. Payment can be made to Blockscout’s SAFE - 0xAddress on Ethereum mainnet (0x242ba6d68FfEb4a098B591B32d370F973FF882B7) with - USDC or USDT.' -start: 1695121888 -end: 1695726688 -state: closed -author: '0x88a98e77B61397DFb4386c81A4997e7F2079F2A9' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 79417.69397070853 -scores: - - 79344.22448151269 - - 1.3987814300711263 - - 72.07070776573612 -votes: 361 -quorum: 0 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-9.yml b/public/GIPs/GIP-9.yml deleted file mode 100644 index da33d6fd..00000000 --- a/public/GIPs/GIP-9.yml +++ /dev/null @@ -1,106 +0,0 @@ -id: QmcQjdevt8Ue2P4XSKFY8PehLBRbPmambJRgeugYeC31zV -gip_number: '9' -url: https://snapshot.org/#/gnosis.eth/proposal/QmcQjdevt8Ue2P4XSKFY8PehLBRbPmambJRgeugYeC31zV -title: Launch Liquidity Mining program for Prediction Markets using Gnosis Conditional - Tokens -body: "\n# Summary\n\nGnosisDAO will launch a Liquidity Mining program for prediction\ - \ markets using Gnosis Conditional Tokens that would reward liquidity providers\ - \ with GNO to incentivize a curated set of markets and thus boost the use of Gnosis\ - \ Conditional Tokens.\n\n# Abstract\n\nThe GnosisDAO will allocate 120,000 GNO from\ - \ the treasury for the first 12 months of this liquidity incentivization initiative.\ - \ It will dynamically manage the GNO rewards distribution by assigning “allocation\ - \ points” to specific markets that the GnosisDAO votes on in order to stimulate\ - \ the markets with a higher participation potential or that would generate quality\ - \ predictive data for the GnosisDAO. Currently, it means incentivizing mainly liquidity\ - \ providers for Omen markets on xDai but the program would be open to any solution\ - \ using Conditional Tokens (for example, it could also incentivize ERC20 wrapped\ - \ conditional tokens on exchanges such as Uniswap, Balancer, SushiSwap, and 1inch).\n\ - \n \n\n# Motivation\n\nIn the current environment full of yield farming opportunities,\ - \ providing capital to any protocol incurs a high opportunity cost. Moreover, prediction\ - \ markets are known to be more attractive to users and more potent at predicting\ - \ events when the markets are liquid and efficient enough to allow for high-scale\ - \ arbitrage (cf. Vitalik Buterin [Prediction Markets: Tales from the Election](https://vitalik.ca/general/2021/02/18/election.html)\ - \ blog post).\n\nAnyone can add liquidity to prediction markets using Gnosis Conditional\ - \ Tokens by minting them for existing markets or even creating their own markets.\ - \ Liquidity attracts traders, trading generates prediction market fees, and ultimately\ - \ this profitability attracts more liquidity. This is a flywheel effect that has\ - \ to be incentivized within the Conditional Tokens ecosystem in order to position\ - \ ourselves in the prediction market scene.\n\nRegardless of the venue, early liquidity\ - \ providers take on more risk and opportunity costs: including contract risk, low\ - \ initial profitability, etc. Moreover, conditional Tokens users should get to participate\ - \ early on in deciding how the GnosisDAO evolves and plans to build new versions\ - \ of the Conditional Tokens.\n\nToward this end, we propose implementing a Liquidity\ - \ Mining program for prediction markets using Gnosis Conditional Tokens rewarding\ - \ liquidity providers with GNO tokens. These types of initiatives are proven to\ - \ attract significant amounts of capital into products and to kickstart a virtuous\ - \ cycle of additional liquidity (see the examples of Balancer, Sushiswap, and 1inch)\ - \ and thus improved user experience and efficiency which will, in turn, bring more\ - \ usage to Conditional Tokens.\n\nThe indirect benefits of this program for the\ - \ GnosisDAO are multiple:\n\n- Fostering the use of one of Gnosis core products\ - \ (CT framework).\n \n- Upgrading the distribution of GNO by rewarding it to\ - \ valuable community members.\n \n- Improving the quality of data generated\ - \ by prediction markets using CT.\n \n\nThe potential direct benefits to the\ - \ GnosisDAO are just waiting to be unlocked by the governance. In the future, it\ - \ could take the form of the implementation of a redemption fee mechanism embedded\ - \ into the Conditional Tokens framework, or of a trading fee in exchanges controlled\ - \ by the GnosisDAO. Legacy prediction markets like PredictIt charge significant\ - \ fees (10% of the profit on a market and 5% of withdrawals), blockchain prediction\ - \ markets like Augur or Cover charge a smaller redemption fee (~1% for Augur and\ - \ 0.1% for Cover). As long as the GnosisDAO provides continuous support and development\ - \ for Conditional Token, a small fee will probably be accepted by the users.\n\n\ - It would also be possible for the GnosisDAO to find novel revenue sources around\ - \ Conditional Tokens. For example, frontends controlled by the GnosisDAO could also\ - \ allow users to burn some GNO in order to have their markets displayed in more\ - \ attractive positions of the UI.\n\n# Specification\n\nThe GnosisDAO liquidity\ - \ mining program for prediction markets using Conditional Tokens will be inspired\ - \ by Balancer and SushiSwap liquidity mining programs.\n\n \n\nFor the first year\ - \ 120,000 GNO tokens, or 10,000 per month, will be distributed to liquidity providers\ - \ staking their conditional tokens liquidity into the GnosisDAO liquidity mining\ - \ contracts. For networks other than Ethereum mainnet (in particular xDAI), those\ - \ GNO tokens would be wrapped on the particular network.\n\n \n\nThe amount of\ - \ GNO distributed to a particular liquidity pool will be determined by an allocation\ - \ point system. The GNO will be distributed between pools in proportion to their\ - \ allocation points and within pools in proportion to participant liquidity. \n\ - \ \n\nFor example let’s assume there are 3 pools A, B, and C with 100, 400, and\ - \ 500 allocation points, Alice has 200 ETH of liquidity in pool A which has a total\ - \ of 500 ETH of liquidity. Alice would receive 10000*(200/500)*(100/1000)=400 GNO\ - \ per month.\n\n \n\nIn order to be able to rapidly incentivize new markets when\ - \ opportunities come up, setting up allocation points will be done through a fast-track\ - \ procedure on Snapshot which does not require going through the complete governance\ - \ procedure. \n \n\nAny account with at least 1000 GNO (from a snapshot taken\ - \ at the beginning of the month) will be able to make an allocation point proposal\ - \ each month for each 1000 GNO it holds (so an address with 3000 GNO would be able\ - \ to make 3 allocation proposals per month). Those would be put to vote instantly\ - \ with a 1 week voting period and without quorum requirements. \n \n\nAn allocation\ - \ proposal would contain:\n\n- The conditional token liquidity pool to be incentivized.\n\ - \ \n- The number of allocation points for this pool.\n \n- The start and\ - \ finish date of the incentivization.\n \n\n \n\nAllocation proposals can provide\ - \ allocation points to new pools or change the allocation of a current pool (including\ - \ setting it to 0).\n\n \n\n# Implementation\n\n \nMembers of the Gnosis team\ - \ will design/fork a liquidity mining rewards distribution contract (and its interface)\ - \ to allow for liquidity providers to stake their Conditional Tokens and claim their\ - \ rewards and set up a dedicated Snapshot space (with the >=1000 GNO proposal requirement)\ - \ to allow for allocation points proposal voting.\n\n \n\nAn explanatory thread\ - \ for the streamlined Liquidity Mining allocation points governance process will\ - \ be posted in GnosisDAO forum.\n" -start: 1619085600 -end: 1619690400 -state: closed -author: '0x4a9A2F31E2009045950DF5aAb36950609DE93c78' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 35455.90099854775 -scores: - - 29132.271626810987 - - 6323.629371736783 - - 0 -votes: 56 -quorum: 0 -funding: - amount: 120,000 - currency: GNO - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-90.yml b/public/GIPs/GIP-90.yml deleted file mode 100644 index 540b6ed0..00000000 --- a/public/GIPs/GIP-90.yml +++ /dev/null @@ -1,63 +0,0 @@ -id: '0x7fd56c5eb290393598d2b601913ab74f196f154bd1f6ef0261c2a7c34e096dd9' -gip_number: '90' -url: https://snapshot.org/#/gnosis.eth/proposal/0x7fd56c5eb290393598d2b601913ab74f196f154bd1f6ef0261c2a7c34e096dd9 -title: Should Gnosis.eth update its ENS resolver to resolve .GNO domains on Gnosis - Chain? -body: "### Executive Summary ###\n\n.GNO domains is launching on Gnosis Chain, with\ - \ one of the key features being a CCIP resolver that resolves .GNO domains on ENS.\ - \ For this to be implemented gnosis.eth is required to update its resolver to the\ - \ new CCIP resolver being developed.\n\n### Introduction ###\nWe at Gnosis have\ - \ been working with SpaceID, and DM3 protocol to bring .GNO domains to Gnosis. We\ - \ call it Genome.\n\nGenome’s mission is to create a digital-ID product centered\ - \ around .GNO domains, integrating the communities, dApps, and utilities native\ - \ to Gnosis chain as well as linking .GNO domains with ENS.\n\n### Product Features:\ - \ ###\n\n- .GNO domains integrated with the Gnosis ecosystem\n- Genome .GNO NFT\ - \ collection native to Gnosis\n- Developing a CCIP resolver enabling .GNO domains\ - \ to be resolved on Ethereum via ENS\n- .GNO Integration with current and future\ - \ JV (Space-ID) partners\n\nGenome is live on testnet! https://test.genomedomains.com/\ - \ \n\nENS Resolver Features:\n\nENS defines this standard where an example.eth address\ - \ can issue text.example.eth on Layer 2 (or another Layer 1 like Gnosis Chain).\ - \ With no or minimal trust assumptions. \n\nENS’ explainer on CCIP: https://docs.ens.domains/dapp-developer-guide/ens-l2-offchain\n\ - Our CCIP resolver in this case: https://github.com/dm3-org/genome-ccip-resolver\ - \ (only deployed on Gnosis testnet so far)\n\nNow, each example.gnosis.eth subdomain\ - \ will also have an example.gno domain. Those are centrally managed by Space-ID.\n\ - \nBoth are linked.\n\n.gno is resolved via https://www.npmjs.com/package/@web3-name-sdk/core\n\ - \n.gnosis.eth is resolved via an up-to-date version of ethersjs for example.\n\n\ - When I enter example.gnosis.eth in metamask - for example - the CCIP resolver contract\ - \ returns a URL to a CCIP-Read client like ethers.js. This URL can be used to perform\ - \ an off-chain lookup instead of fetching the records from the contract directly.\n\ - \nWhen calling the URL, the Gateway resolves the request by using the Gnosis RPC\ - \ provider to query the data from the SpaceId contract on the Gnosis Chain. The\ - \ data returned is signed by the gateway and then returned to the Read Client. To\ - \ add additional security, the gateway signs the response before, so only “trusted”\ - \ gateways can be used\n\n### Impact and Benefits ###\nThe main goal of Genome and\ - \ .GNO domains is increasing ease of access to new and existing users alike. With\ - \ the increasing costs of building on Ethereum, allowing .GNO domains to resolve\ - \ on ENS not only lowers costs for owning a domain but also opens up a new set of\ - \ possibilities for experimentation.\n\n### Proposed Changes / Implementation Plan\ - \ ###\nENS records for gnosis.eth need to be updated to set the resolver to Genome’s\ - \ resolver address 0xc9bf092673b3a066df088a2a911e23e9b69b82f2\n( https://github.com/dm3-org/genome-ccip-resolver\ - \ )\n\n### Team/ Organization/References ###\nRalph X., Gnosis BD\nPhilipp S., Gnosis\ - \ BD\nAlex Plutta, DM3 Protocol/Corpus Ventures\nEduardo Vega-Patiño, DM3 Protocol/Corpus\ - \ Ventures" -start: 1712913062 -end: 1713517862 -state: closed -author: '0x9dC3f992637976aB1ebADBcb3FC3e6fE94a5c8f5' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 77114.27589930757 -scores: - - 77114.15159384944 - - 0.004974602282557618 - - 0.11933085584175256 -votes: 126 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-91.yml b/public/GIPs/GIP-91.yml deleted file mode 100644 index fcd241e6..00000000 --- a/public/GIPs/GIP-91.yml +++ /dev/null @@ -1,141 +0,0 @@ -id: '0xa779ccda18ee2aeb56894e8b5baafd3d2568e99b0fea4a03dd246f548084a93c' -gip_number: '91' -url: https://snapshot.org/#/gnosis.eth/proposal/0xa779ccda18ee2aeb56894e8b5baafd3d2568e99b0fea4a03dd246f548084a93c -title: Should the GnosisDAO onboard into Centrifuge Prime? -body: "Executive Summary\nThis proposal initiates the onboarding of GnosisDAO into\ - \ Centrifuge Prime by investing part of the treasury into Real-world assets (RWAs).\ - \ The onboarding will be contingent upon the establishment of a Legal Conduit for\ - \ GnosisDAO by Centrifuge for the safe investment of RWAs. This proposal will integrate\ - \ existing treasury management processes and services providers such as karpatkey\ - \ DAO. The benefit of this proposal will provide the GnosisDAO Treasury with an\ - \ additional diversified source of yield, a resilient legal infrastructure for engaging\ - \ with RWA investments, and access to additional diversified sources of credit through\ - \ Centrifuge.\n\nService Description\nThis proposal initiates the onboarding of\ - \ GnosisDAO into Centrifuge Prime to invest part of the treasury into RWAs. Centrifuge\ - \ will provide the services to establish a legal structure that supports safe RWA\ - \ investments, integrates GnosisDAO’s treasury management processes, establishes\ - \ any technical integrations needed, and facilitates the curation of a diversified\ - \ investment portfolio.\n\nOnce established, this proposal targets an initial allocation\ - \ of $10m USD into Centrifuge Prime, through pools such as Anemoy LTF, New Silver\ - \ 1, and other available pools.\n\nCentrifuge has been collaborating closely with\ - \ karpatkey DAO and GnosisDAO contributors on a variety of RWA initiatives within\ - \ the Gnosis ecosystem. Beyond bringing new exposure to the GnosisDAO treasury,\ - \ possible ideas include:\n\ndeploying Centrifuge Liquidity Pools directly on Gnosis\ - \ Chain;\nleveraging the Centrifuge Securitization Engine for the issuance of unique\ - \ pools for the Gnosis community; and\nexploring deeper partnerships with specific\ - \ parties and efforts inside the Gnosis ecosystem.\nWe view this proposal as the\ - \ first step in bringing the Gnosis and Centrifuge ecosystems more closely together\ - \ and establishing a flourishing partnership for Real World Assets in DeFi and Gnosis\ - \ Chain.\n\nKey aspects\nThis proposal will accomplish:\n\nEstablishing a Legal\ - \ Conduit for the safe investment of real-world assets.\nIntegrating the existing\ - \ treasury management process to utilize this conduit.\nFacilitating ongoing management\ - \ tasks including portfolio and asset curation, reporting via the Centrifuge Credit\ - \ Group, and dedicated technical and user support.\nThe Legal Conduit\n\nThe legal\ - \ structure will be integrated with DAO governance to ultimately be owned and operated\ - \ by GNOtoken holders. The principle idea behind the structure is to establish an\ - \ entity that is capable of signing and fulfilling legal agreements on behalf of\ - \ the DAO, ultimately enabling GnosisDAO’s path to legal recourse. This provides\ - \ a high degree of reliability and security for RWA investments, without compromising\ - \ the principles and position of the DAO.\n\n\n1600×936 178 KB\nThis framework is\ - \ based on our extensive experience in MakerDAO setting up similar 1 structures.\ - \ There, the same structure supports a >$1B in deployed capital.\n\nWhile the legal\ - \ conduit is initially intended to facilitate an investment by GnosisDAO into RWA\ - \ offered through Centrifuge Prime, the same structure could potentially also be\ - \ used to diversify GnosisDAO’s treasury into RWAs available through other platforms/issuers/brokers,\ - \ thereby expanding the scope of treasury management activities currently available\ - \ to the DAO.\n\nIntegrated Management Process\n\nGnosisDAO has an existing sophisticated\ - \ and high-quality non custodial treasury management process, pioneered and led\ - \ by karpatkey DAO. The services in this proposal will be fully integrated to support\ - \ the existing processes efficiently, while also supporting any future developments\ - \ within the DAO. These processes and overall structure will be developed in collaboration\ - \ with the Gnosis community.\n\nOngoing Management and Support\n\nCentrifuge Prime\ - \ provides dedicated access to the Centrifuge ecosystem and community. As part of\ - \ this proposal, the Centrifuge team will work directly with karpatkey DAO to provide\ - \ ongoing support for the RWA portfolio allocated through Prime.\n\nThis will involve\ - \ ecosystem and pipeline management with dedicated relationships to high-quality\ - \ asset managers, service providers, and other actors necessary to maintain and\ - \ curate a diversified RWA portfolio. The Centrifuge Credit Group, a DAO entity\ - \ setup to provide risk and credit analysis, can be utilized to provide general-purpose\ - \ reporting for investors. This provides an additional level of ongoing monitoring\ - \ and independent analysis for karpatkey DAO and the community to utilize.\n\nFinally,\ - \ Centrifuge is committed to providing technical and user support to the Gnosis\ - \ community. This includes community education and engagement, support for technical\ - \ integrations, and dedicated support to the investment and portfolio management\ - \ team.\n\nBeyond US treasuries, the Centrifuge Prime setup would also allow the\ - \ Gnosis DAO to allocate into the following asset classes:\n\nBucket Focus\tDescription\t\ - Targeted Returns\tLiquidity Thresholds\nLiquidity\tLowest risk while maintaining\ - \ US Treasuries, MMF, AA+ rated short term bonds\t5-6%\tDaily\nPreservation\tInvestments\ - \ in senior secured loans such as real estate, corporate bonds etc.\t6-8%\t3-6 months\n\ - Acceleration\tTrade finance, non-bank originators, emerging markets\t8-20%\t3-24mo\n\ - Service Scope - Describe the scope of the service, including any limitations or\ - \ exclusions that apply.\nThe scope of services described above intends to cover\ - \ the RWA investments made through Centrifuge Prime.\n\nService delivery - Give\ - \ an overview of how the service will be delivered, including any key processes,\ - \ procedures, or technologies.\nThe process for establishing the legal conduit is\ - \ as follows:\n\nThe Centrifuge contributor team will retain external legal counsel\ - \ in the Cayman Islands to represent the Gnosis DAO’s interests. The results of\ - \ this work will be presented to the Gnosis DAO, and the community will have time\ - \ to process, provide feedback, and otherwise request changes in the legal structure.\ - \ The structure will only be implemented and executed with DAO approval, via the\ - \ requisite process as requested by the community.\n\nThe follow-on processes and\ - \ procedures will be developed over further collaboration with the community.\n\n\ - Support - Provide a brief description of the support services that are provided.\n\ - The support services are mentioned above.\n\nPricing and payment\nThe pricing for\ - \ this proposal is structured to streamline fees. The usage of GNO as a reward helps\ - \ to align incentives towards long-term interests versus short-term benefits.\n\n\ - The fee structure is as follows:\n\nFees\t\t\nStructural Setup\tup to 50,000 USDC\t\ - To be paid immediately into a Safe controlled by Centrifuge to pay for lawyers and\ - \ Cayman service providers to set up a Cayman foundation company to the benefit\ - \ of the Gnosis DAO, any unused budget will be returned to the GnosisDAO treasury.\ - \ The structure may require ongoing fees but will be assessed on a periodic basis\ - \ and only after approval from the DAO.\nPortfolio Fee\t0.35% p.a. on assets in\ - \ Prime up to $50M, 0.2% $50-100M, 0.1% >$100M\tAccrued on an ongoing basis to Centrifuge\ - \ for maintenance and support and payable upon redemption.\nGnosis Rewards\t250\ - \ GNO, paid incrementally over 12 months into the Centrifuge treasury, starting\ - \ with the first $1M Deployment into Centrifuge Prime. GNO would be locked for a\ - \ period of 12 months.\tTo cover costs of resource and facilitation time for the\ - \ development of the infrastructure and processes. Centrifuge DAO intends for this\ - \ to create better alignment with strong skin in the game incentives for success.\n\ - Service Terms and Exit Strategy\nCentrifuge Prime can be unwound and offboarded\ - \ with 30 days’ notice. The positions and structures can be off-boarded entirely\ - \ or transferred to new ownership. Investments themselves will be subject to the\ - \ policies of the investment contract, but can also be unwound.\n\nTeam/Organization\n\ - Centrifuge has a long track record of working with DAOs to bring RWAs on as collateral.\ - \ Notable firsts include minting MakerDAO’s first real-world asset, structuring\ - \ the first on chain securitization, launching the RWA Market with Aave, and partnering\ - \ with BlockTower to bring the first credit fund operations on chain. Centrifuge\ - \ Prime is built for the needs of large decentralized organizations. It provides\ - \ the infrastructure and services to quickly and easily onboard and scale a fully\ - \ diversified portfolio of real-world assets. Through Centrifuge Prime, decentralized\ - \ organizations can get access to an institutional ecosystem of RWA partners and\ - \ service providers.\n\nCentrifuge is a DAO-governed protocol. K/Factory contributes\ - \ to the Centrifuge protocol by providing development, and infrastructure, and working\ - \ with users to ensure adoption.\n\nMore contributor information can be found on\ - \ the Centrifuge website 2.\n\nConclusion\nThis proposal represents a significant\ - \ step forward for the Gnosis community in its RWA engagement. Centrifuge Prime\ - \ is an optimal solution for developing a diversified RWA portfolio that the DAO\ - \ can integrate into its existing treasury management solutions. Centrifuge has\ - \ collaborated with karpatkey DAO on the development of this proposal and, with\ - \ support from the Gnosis Community, would like to continue this collaboration to\ - \ add additional exposure to the GnosisDAO treasury." -start: 1705933196 -end: 1706537996 -state: closed -author: '0xa9D7713e49d2931f12019D3179ccCf7F60F02BC7' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 107428.16584046364 -scores: - - 104191.18782628604 - - 8.34195429587821 - - 3228.636059881722 -votes: 300 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-92.yml b/public/GIPs/GIP-92.yml deleted file mode 100644 index db28d791..00000000 --- a/public/GIPs/GIP-92.yml +++ /dev/null @@ -1,158 +0,0 @@ -id: gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token -gip_number: 92 -url: https://forum.gnosis.io/t/gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token -title: Should Gnosis DAO spin-off karpatkey DAO and deploy the KPK Token? -body: "## Abstract\n\nkarpatkey has led the active DAO treasury management space after\ - \ becoming GnosisDAO’s treasury manager in [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ - \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417).\ - \ Following the tradition of the sister projects [CowDAO](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735)\ - \ and [SafeDAO](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ - \ karpatkey will launch a DAO spin-off and a governance token (KPK) from the GnosisDAO.\n\ - \nWe also put forward a $2.5 million investment proposal to GnosisDAO. In exchange\ - \ for this investment, GnosisDAO would receive 1.25% of KPK full supply, valued\ - \ at $200 million. *A 1.25% GNO-KPK token swap would also be arranged at the same\ - \ $200 million valuation, with a 5-year vesting period for the tokens.\n\nkarpatkey\ - \ will allocate 5% of its airdrop to GnosisDAO, bringing GnosisDAO’s total stake\ - \ in KPK to 10% of the fully diluted supply.\n\n# Introduction\n\nWe’re ending the\ - \ first three years of karpatkey with many validated learnings and an exciting roadmap.\n\ - \nOur [2022](https://forum.gnosis.io/t/karpatkey-2022-year-in-review-for-gnosis/6431)\ - \ and [2023](https://forum.gnosis.io/t/karpatkey-2023-year-in-review-for-gnosis/8016)\ - \ contributions to the GnosisDAO have been essential in developing the Gnosis Chain\ - \ and GnosisDAO’s treasury, improving the long-term value of GNO.\n\nWe’ve become\ - \ the leaders in active DAO treasury management and on-chain, non-custodial asset\ - \ management. karpatkey has established a strong network of DAO treasuries with\ - \ dedicated finance working groups for GnosisDAO, Balancer, ENS, CoW, Lido, and\ - \ Aave. We’ve also contributed to Uniswap, Spark/MakerDAO, Safe, and Arbitrum by\ - \ establishing delegate platforms and conducting paid research.\n\nkarpatkey has\ - \ been working in the most adversarial blockchain environment—where any vulnerability\ - \ is bound to be exploited—and has been exposed to multiple market volatility cycles.\ - \ We have resisted mostly because of our prudent, rigorous risk management approach\ - \ and long-term sustainable strategies.\n\nWe’ve executed +7000 DeFi interactions\ - \ with zero funds lost or hacked and actively protected our treasuries for +$900m.\ - \ We’ve improved the risk management infrastructure and tooling for our asset managers,\ - \ building the foundation for our alpha.\n\nOur past activity has ultimately generated\ - \ objective knowledge across the Ethereum ecosystem and DeFi protocols, which we’ve\ - \ used to contribute to the development of roadmaps and building and maintaining\ - \ [structural tooling](https://github.com/karpatkey) for non-custodial on-chain\ - \ treasury and asset management, and risk management infrastructure to secure institutional\ - \ investment-grade funds.\n\nHaving validated our market-fit, it’s time to take\ - \ karpatkey to the next level.\n\nLike [COW DAO](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735)\ - \ and [Safe DAO](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ - \ we intend to launch our DAO spinoff from the GnosisDAO and issue our governance\ - \ token.\n\n## Our Mission\n\n[![](https://forum.gnosis.io/uploads/default/optimized/2X/d/dacc95f79d75599b233b80f7d2f8126b47e1c37d_2_438x428.png)805×788\ - \ 73.7 KB](https://forum.gnosis.io/uploads/default/original/2X/d/dacc95f79d75599b233b80f7d2f8126b47e1c37d.png)\n\ - \nAs traditional finance [embraces digital assets](https://www.sec.gov/news/statement/gensler-statement-spot-bitcoin-011023)\ - \ and [onboards assets](https://app.rwa.xyz) on-chain, it is imperative that DeFi\ - \ protocols manage financial resources to maximise token holder value and ensure\ - \ the capital necessary to maintain a sound, resilient, and innovative ecosystem.\ - \ Everybody in our industry talks about banking the unbanked. However, nobody talks\ - \ about banking DeFi protocols.\n\nBanking DeFi is what karpatkey does. We provide\ - \ financial services to the leaders in each DeFi category, creating network effects\ - \ and robustness for their users, and the DeFi ecosystem as a whole.\n\n## Our Values\n\ - \nWe’ve inherited Gnosis’ commitment to core values like decentralisation, open-source\ - \ collaboration, and ethically sound contributions to the Ethereum ecosystem.\n\n\ - The following are the principles that guide the way we behave as a community and\ - \ help shape karpatkey’s decision-making process:\n\n * **Simplicity** : We operate\ - \ in highly complex and unpredictable environments, so we think first principles\ - \ and execute at the right abstraction level to reach the shortest path to the solution.\n\ - \n * **Focus** : We live by the Pareto Principle, so we pragmatically prioritise\ - \ tasks for maximum short-term output. This means we mindfully choose continuous\ - \ improvement over delayed perfection.\n\n * **Altruism** : We cultivate long-lasting\ - \ and value-based relationships. This requires us to put in the effort without expecting\ - \ any short-term ROI. It involves shifting the focus from diminished self to collective\ - \ compounded returns.\n\n * **Ownership** : We trust each other to do and be more,\ - \ encouraging and valuing personal initiative. We decentralise decision-making,\ - \ equipping team members with the information, agency, and confidence to make good\ - \ decisions for the organisation on their own.\n\n * **Collaboration** : We care\ - \ for each other and explore new ways to continually grow our business through teamwork.\ - \ We learn from and challenge one another, sharpening existing skills and learning\ - \ new ones. We believe cognitive diversity generates better decisions.\n\n * **Curiosity**\ - \ : Status quo is not an acceptable argument—we question concepts and processes\ - \ to improve. We understand that exploring the possibilities is the only path leading\ - \ to progress.\n\n * **Adaptability** : We thrive in uncertain environments by\ - \ avoiding overfitting and adjusting to short, iterative execution cycles. We assess\ - \ and experiment rapidly, frequently, and economically, embracing every failure\ - \ as a learning opportunity.\n\n * **Selflessness** : The community is above the\ - \ individual, so when debating internally, we leave our egos outside and let the\ - \ best idea win.\n\n * **Rigour** : We acknowledge that our job has greater consequences,\ - \ so we perform at the highest level of quality, care, and professionalism.\n\n\n\ - \n\n# KPK Token\n\n## Utility & Supply\n\nThe goal of the KPK token is to align\ - \ the parties actively contributing to the delivery of karpatkey’s mission. KPK\ - \ will be a governance token to define karpatkey treasury parameters, budgets, OTC\ - \ deals, buybacks, and M&A deals.\n\nThe full supply will be 1 million KPK and non-transferable\ - \ for the foreseeable future.\n\n## Distribution\n\n[![image](https://forum.gnosis.io/uploads/default/optimized/2X/f/fae58c034a2ab75b51782801590e2a7bebad382f_2_690x356.png)image976×504\ - \ 35.5 KB](https://forum.gnosis.io/uploads/default/original/2X/f/fae58c034a2ab75b51782801590e2a7bebad382f.png\ - \ \"image\")\n\n * **Founders/Early Contributors** : Initial full-time contributors\ - \ who invested at a $20 million valuation.\n\n * **GnosisDAO Early Investment**\ - \ : $1 million investment at a $50 million valuation in [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233).\n\ - \n * **Team** : 37% of the total Team’s projection has already been allocated to\ - \ team members (currently under a vesting schedule), and the rest will be distributed\ - \ to the future team.\n\n * **Future Fundraising** : Allocated to strategic investors.\n\ - \n * **Airdrops** : Incentives used to boost the adoption of karpatkey and increase\ - \ TVL for our future funds.\n\n * **Treasury Core Units** : Teams working with\ - \ our Finance Working Groups, not included in the Team’s budget.\n\n * **Partners**\ - \ : Organisations contributing to our vision.\n\n * **M &A allocation**:\n\n \ - \ * Token swaps with our DeFi protocol treasuries;\n * Equity or token swaps\ - \ for strategic projects building Risk Management tooling, Asset Management infrastructure,\ - \ and DeFi financial services; and\n * Convertible Collateral to source DeFi\ - \ assets from treasuries for market-making and bootstrapping ETF-like products.\n\ - \ * **Treasury Reserve** : Used as collateral and liquidity for various purposes.\n\ - \n\n\n\n# How does Gnosisdao benefit from this proposal?\n\nGNO token holders benefit\ - \ from substantial ownership in karpatkey thanks to GnosisDAO’s investment, a future\ - \ airdrop proportional to the [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ - \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417)\ - \ expenditures, and by being a leader in the DeFi treasury network we’re building.\n\ - \n# GnosisDAO’s Investment and Token Swap\n\nGnosisDAO acquired 2.5% of karpatkey\ - \ in January 2022 with the passing of [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ - \ at a $50 million valuation. We propose to increment +2.5% ownership through:\n\ - \n * A $2.5 million investment for 1.25% ownership at a $200 million valuation;\ - \ and\n * *A $2.5 million GNO-KPK token swap for 1.25% ownership at a $200 million\ - \ valuation, with a 5-year vesting period.\n\n\n\nGNO token holders benefit from\ - \ substantial ownership in karpatkey thanks to GnosisDAO’s investment, a future\ - \ airdrop proportional to the [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ - \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417)\ - \ expenditures, and by being a leader in the DeFi treasury network we’re building.\n\ - \nAdditionally, GnosisDAO will be allocated 5% of KPK tokens through the karpatkey\ - \ airdrop. Bringing GnosisDAO’s total KPK stake to 10% of the fully diluted supply.\n\ - \n## Disclaimer\n\nThe plans outlined in this proposal are for discussion purposes\ - \ only and can be subject to further changes. They may also need to be (re)structured\ - \ to account for legal, regulatory, or technical developments as well as governance\ - \ considerations. This document should not be construed as an offering of securities,\ - \ taken as the basis for making investment decisions, nor be construed as a recommendation\ - \ to engage in any transactions. You are solely responsible for your own investment\ - \ decisions and transactions.\n\nThe decision to spin out karpatkey and to launch\ - \ a KPK token lies solely with the Gnosis DAO. Consequently, this document only\ - \ describes the token launch process and its technical implementation as currently\ - \ envisaged.\n\n## *Update September 2024 - Modifications to GIP-92 phase-2\n\n\ - The initial proposal called for GnosisDAO to invest $5M in karpatkey through a $2.5M\ - \ stablecoin investment and a $2.5M GNO-KPK token swap.\n\nHowever, given the current\ - \ market conditions and the undervaluation of GNO, we propose replacing the token\ - \ swap with a $2.5M USDC investment. To reinforce our commitment to GNO, karpatkey\ - \ will allocate 10% of its total revenue over the next 12 months to purchasing GNO\ - \ in the open market, which we estimate will add +$2M GNO to our treasury. Purchases\ - \ will be made at our discretion and included in monthly reports to maintain transparency.\n\ - \nThe final GIP-92 structure consists of a $5M investment for 2.5% ownership at\ - \ a $200M valuation, with an additional 5% ownership through an airdrop, totalling\ - \ 7.5%. The total ownership of the Gnosisdao will amount to 10%.\n\n50 Likes\n\n\ - **[next page →](/t/gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token/8115?page=2)**\n" -start: 1708027248 -end: null -state: [] -author: '<karpatkey>' -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: 2,500,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-93.yml b/public/GIPs/GIP-93.yml deleted file mode 100644 index 9ae37fe8..00000000 --- a/public/GIPs/GIP-93.yml +++ /dev/null @@ -1,128 +0,0 @@ -id: '0x33484aae7734d8e184841964636de96e1a7d4fd8b4666f2bd3dee38175be38f3' -gip_number: '93' -url: https://snapshot.org/#/gnosis.eth/proposal/0x33484aae7734d8e184841964636de96e1a7d4fd8b4666f2bd3dee38175be38f3 -title: Should GnosisDAO support the integration of Hashi within Gnosis Chain’s Canonical - Bridges? -body: "https://forum.gnosis.io/t/gip-93-should-gnosisdao-support-the-integration-of-hashi-within-gnosis-chains-canonical-bridges/8245\n\ - \n### Category\nFunding\n\n### Executive Summary:\nThis proposal presents a detailed\ - \ plan for allocating funds towards integrating the Hashi protocol into Gnosis Chain’s\ - \ canonical bridges from Ethereum, namely the xDAI Bridge and the AMB (on which\ - \ the OmniBridge is built). The initiative emphasizes significantly enhancing the\ - \ security and decentralization of these bridges. The integration aims to introduce\ - \ advanced security measures, mitigate systemic risks, and ensure the Gnosis Chain\ - \ ecosystem remains resilient against the evolving landscape of security threats.\ - \ By fortifying the infrastructure with Hashi, we seek to establish a new standard\ - \ for security and reliability in cross-chain transactions.\nHashi is an additive\ - \ security framework, currently supporting 15+ General Message Passing bridges and\ - \ ZK light clients. With its integration on Gnosis bridges we remove any reliance\ - \ on one specific bridging mechanism and add the ability to define threshold based\ - \ bridging (only when 2 of 3 bridges agree a bridge transaction is accepted) along\ - \ with zero vendor lock-in capabilities by allowing easy replacement of any bridging\ - \ mechanisms in the future.\n\nThis integration will make Gnosis Chain the only\ - \ L1 with such strong bridge security guarantees. We anticipate that this effort\ - \ will foster greater user confidence and will have a big positive impact on the\ - \ Gnosis ecosystem.\n\n### Specification\nThe proposal outlines a multi-faceted\ - \ approach, focusing on:\n\n* Developing an Integration Plan and Reference implementation\n\ - Tailoring Hashi’s protocol to enhance the security properties of the canonical bridges.\ - \ This requires the writing of dedicated technical documents, specifications and\ - \ the development of a reference implementation.\n\n* Conducting Extensive Security\ - \ Audits\nPartnering with leading blockchain security firms to conduct end-to-end\ - \ audits, identifying and addressing potential vulnerabilities within the proposed\ - \ integration framework.\n\n* Executing the Migration\nUpgrading the existing canonical\ - \ bridges with the new proposed integration framework. This will be done in strict\ - \ cooperation with the existing team in charge of Gnosis Chain Bridges.\n\n* Governance\ - \ configuration\nThe current Gnosis Bridges multisig (8 of 15) will be configured\ - \ to set the thresholds and allowed oracles. In the future this governance can be\ - \ also replaced and improved if needed.\n\n### Rationale\nIn an era where security\ - \ breaches and exploits have become increasingly sophisticated, bolstering the security\ - \ and decentralization of Gnosis Chain’s bridges is imperative. Currently, both\ - \ bridges are secured by a decentralized but still permissioned and trusted set\ - \ of validators. Although battle tested throughout the years, the Gnosis community\ - \ and GnosisDAO have realized the need to move to a more trust minimized and future-proof\ - \ setup.\n\nThis proposal is driven by the vision of creating a fortified, resilient\ - \ infrastructure capable of withstanding current and future security challenges.\ - \ The Gnosis Community has already shown in the past a strong commitment to these\ - \ values by supporting similar efforts (i.e. __[GIP-57](https://forum.gnosis.io/t/gip-57-should-gnosis-dao-support-research-of-a-zksnark-enabled-light-client-and-bridge/5421)__\ - \ and the __[addition of Succinct’s ZK Light Client as a Validator](https://blog.succinct.xyz/omnibridge/)__,\ - \ among others) and by bringing to life the Hashi project itself.\nThis integration\ - \ represents a strategic step forward in safeguarding assets and data, ensuring\ - \ the Gnosis Chain remains a secure, trusted, and highly attractive platform for\ - \ users and developers alike.\n\nLastly, Gnosis DAO has demonstrated in the past\ - \ how important bridge security is to them. This proposal aims to implement previous\ - \ research results and reap tangible benefits.\n\n### Budget\nThe budget is meticulously\ - \ structured to cover all critical aspects of the integration process:\n\n* Hashi\ - \ Integration Design and Development: $60,000 allocated towards developing and implementing\ - \ the Hashi integration.\n\n* Security Audits and Migration Strategies: $90,000\ - \ dedicated to coordinating rigorous security audits and the formulation of robust\ - \ mitigation strategies. \n\n* Preparation and Execution of the Migration: $80,000\ - \ allocated to an in-depth study of the recommended configuration options and execution\ - \ of the migration plan with the assistance of GnosisDAO.\n\n* Monitoring the guarded\ - \ launch and safeguards lifting: $20,000 dedicated to monitoring the initial launch\ - \ with safeguards in place and securely lifting them after the initial guarded phase.\n\ - \n#### Milestones:\n\n* Milestone 1: Hashi Integration Design and Implementation\ - \ (Duration: 2 months)\n\n * Deliverables:\n\n * Development of a detailed security-centric\ - \ design document and spec for Hashi’s integration with the 2 canonical bridges\ - \ of \nGnosis Chain.\n * Implementation of a reference code following the specifications.\n\ - \ * Funding Allocation: $60,000\n\n* Milestone 2: Security Audits and Migration\ - \ Plan (Duration: 2 months)\n\n * Deliverables:\n\n * Completion of external\ - \ security audits with documented findings and implemented fixes.\n * Development\ - \ and launch of a Hashi explorer, a tool to oversee the validation progress of cross-chain\ - \ transactions on Gnosis bridges.\n * Coordination on a possible Migration Plan\ - \ as needed by Milestone 3.\n * Funding Allocation: $90,000\n\n* Milestone 3: Preparation\ - \ and Execution of the Migration of the Existing Bridges to the New Solution (Duration:\ - \ 2 months)\n\n * Deliverables:\n\n * Case Study to present the recommended\ - \ configuration options for Hashi.\n * Final coordination with the Gnosis Chain\ - \ team on the Migration Plan execution.\n * Integration and coordination with\ - \ all available oracle teams (the ones available on the Ethereum > Gnosis chain\ - \ route from the total 17) and setup ZK light clients.\n * Execution of the migration\ - \ on the Chiado testnet.\n * Analysis of testnet outcomes.\n * Execution of\ - \ the migration for the Gnosis Chain’s canonical bridges.\n * Comprehensive report\ - \ detailing the integration’s impact on security and decentralization metrics, including\ - \ community feedback and usage statistics.\n * Funding Allocation: $80,000\n\n\ - * Milestone 4: Monitoring the guarded launch and safeguards lifting.\n\n * Deliverables:\n\ - \n * Hashi as a validator on both Gnosis chain canonical bridges.\n * Monitoring\ - \ of Hashi’s consistency with the current validator set.\n * Hashi as a mandatory\ - \ validator.\n * Funding Allocation: $20,000\n\n* Continued maintenance: Close\ - \ to the end of the implementation of this proposal, a new proposal will be drafted\ - \ covering the ongoing maintenance costs (Engineering, DevOps, and ZK Provers),\ - \ expected to total $100,000-$150,000 per year. ZK prover costs cover the infrastructure\ - \ costs (not gas), which currently are expected to decrease over time with the optimization\ - \ work currently in progress by most ZK teams. Currently running just one Prover\ - \ costs $60,000 / year.\n\nThe above pricing incorporates a significant discount\ - \ due to the long and supportive relationship between Hashi and GnosisDAO.\n\n###\ - \ Evaluation\nSuccess will be evaluated based on the seamless integration of Hashi\ - \ and the absence of significant downtimes during the coordinated migration process.\ - \ Additionally, positive feedback from the Gnosis Chain community will serve as\ - \ an indicator of the integration’s success and its impact on enhancing the ecosystem’s\ - \ security posture.\n\n### Team\nThe Cross-chain Interoperability Alliance, the\ - \ core development team of Hashi, comprises 3 people including 1 project manager\ - \ and 2 blockchain engineers/security experts with a proven track record in developing\ - \ cross-chain solutions and in pioneering stronger security guarantees in the space.\ - \ The 3 team members have 4, 8 and 12 years of blockchain working experience respectively.\ - \ This experience is critical in ensuring the successful execution of this proposal.\n\ - \n### Conclusion\nThrough this proposal, we aim to significantly elevate the security\ - \ and decentralization standards of the Gnosis Chain’s canonical bridges. The strategic\ - \ integration of Hashi not only mitigates systemic risks but also positions Gnosis\ - \ Chain as a leader in secure, decentralized cross-chain communications, all this\ - \ while capitalizing on previous GnosisDAO’s investments." -start: 1711447938 -end: 1712052738 -state: closed -author: '0xA02060F08379A756C044608c0a2fcb9C1D2d21dD' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 84975.52303831984 -scores: - - 84970.59014122224 - - 2.4964848240434914 - - 2.4364122735576905 -votes: 280 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-94.yml b/public/GIPs/GIP-94.yml deleted file mode 100644 index 2a2b33af..00000000 --- a/public/GIPs/GIP-94.yml +++ /dev/null @@ -1,191 +0,0 @@ -id: '0xa89b17e380e7c4f177366988fe456a515ec47e00f1e795f33f6178f82aa36bd3' -gip_number: '94' -url: https://snapshot.org/#/gnosis.eth/proposal/0xa89b17e380e7c4f177366988fe456a515ec47e00f1e795f33f6178f82aa36bd3 -title: Should the GnosisDAO approve the “Gnosis Assets Holding I Foundation” for onboarding - into Centrifuge Prime? -body: 'oted on, provide an overview of the foundation structure, and share next steps. - - - This Proposal is an Update to GIP-91 - - Centrifuge is pleased to announce the successful snapshot vote on GIP-91 which brings - GnosisDAO a large step closer in its ability to diversify the treasury into real-word - assets (RWAs). Centrifuge received an overwhelming 96.99% of the governance vote - in the snapshot that closed on January 29th. The proposal targeted initial allocations - of $10m USD into Centrifuge Prime, through pools such as Anemoy LTF, New Silver, - and other available pools. - - - Since then, the Centrifuge team has been progressing with the operational and legal - next steps to ensure a smooth onboarding process. The legal docs, both the MoA and - AoA (attached to this post) define the critical processes and structure of a Cayman - Foundation Company, which will serve as the RWA Legal Conduit we describe in GIP-91. - A summary of such processes and structural matters are set out in this post below, - but please refer to the legal docs for more detailed information. - - - Legal documents are linked right below and at the bottom of this post: - - - The Memorandum of Association Here - - - The Articles of Association Here - - - We are sharing the summary here for the rest of the community with a view to a final - proposal being voted on for implementation. - - - Bringing Anemoy Liquid Treasury Fund to GnosisDAO - - Centrifuge is pleased to bring U.S t-bill access to the GnosisDAO treasury via the - Anemoy Liquid Treasury Fund. This will provide the DAO access to stable yield uncorrelated - to that of DeFi, and importantly, not denominated in volatile assets like Eth/stEth - as the treasury mainly utilizes today to earn yield. - - - Some benefits of the fund structure include: - - - ‍Daily Liquidity: The fund offers daily redemptions in USDC. - - Direct Ownership: The token serves as evidence of ownership, allowing cost-efficient - redemptions and providing legal claims on assets. - - Investor Protection: Prospective investors must adhere to the Know Your Customer - (KYC) and anti-money laundering requirements of a BVI-regulated fund, ensuring a - secure and transparent investment environment. - - Transparency: Centrifuge provides near real-time onchain visibility of holdings, - returns, and tokenized U.S. Treasury Bills. - - - 985×378 19.2 KB - - The Anemoy Liquid Treasury Fund purchases US Treasury bills at different periods - with varying durations, ensuring a revolving set of maturities. The Fund’s investments - are T-Bills with 1 month, 3 month and 6 month maturities. - - - Legal Overview - - The legal structure will be integrated with Karpatkey, who was mandated by governance - to make treasury investment decisions on behalf of the DAO. The principle idea behind - the structure is to establish an entity that is capable of signing and fulfilling - legal agreements for the benefit of GnosisDAO, ultimately enabling GnosisDAO’s path - to legal recourse. This provides a high degree of reliability and security for RWA - investments, without compromising the principles and position of the DAO. This framework - is based on our extensive experience in MakerDAO setting up similar structures. - There, the same structure supports a >$1B in deployed capital. - - - - 1184×690 244 KB - - The structure is enabled by the Cayman Islands Foundation Companies act 2017 (the - Foundation Act). Under this framework, Centrifuge as part of its services, will - set up a foundation company titled the “Gnosis Assets Holding I Foundation.” - - - The Articles of Association defines the critical processes and structure of the - company such as: - - - The company is assigned one nominee director who is responsible for executing and - adhering to the mandate of a DAO Resolution or a Delegated Committee Instruction - - The company may form a Delegated Committee that has a mandate from the DAO to manage - its treasury - - A Delegated Committee Instruction is a written set of instructions as scheduled - to the Articles of Association and from there established as a legal obligation - of the Foundation company. - - A supervisor, responsible for ensuring directors fulfill their duties, and a secretary, - responsible for administering the company, are also required roles - - Specific obligations and procedures for assigning beneficiaries and distributing - assets during events such as winding up the company or similar - - A foundation director will be recommended by Centrifuge solely for the purpose to - execute orders from the DAO, and acts as a legal signature in the Cayman Islands. - The foundation director will implement DAO votes and Delegated Committee Instructions - as detailed in the Articles. The DAO has full authority to remove/replace the foundation - director at full discretion in a timely manner. As part of Centrifuge’s service - offering, the legal conduit/foundation can be repurposed for any of GnosisDAO’s - future needs, including for other RWA projects and issuers. Under the current proposal, - the target max allocation is $10M to be focused mainly in U.S t-bills, but also - diversified in other credit strategies Centrifuge offers if desired. - - - The Initial foundation company secretary shall be Leeward Management Limited - - - Leeward Management Limited is a leading fiduciary and governance services provider - in the Cayman Islands. The service company is well positioned to fulfill work on - behalf of a DAO as it is specialized in dealing with Digital Assets, specifically - RWA structured products. - - - “With the rapid institutionalization of digital assets, having independent, non-executive - directors who provide investors and stakeholders with an added layer of transparency, - accountability and expertise is often a critical element to ensuring a project’s - success.” - - - Glenn Kennedy will be appointed foundation director as approved by both Centrifuge - and GnosisDAO. - - - Due to our relationship with Leeward in using them in several other similar projects, - Centrifuge is able to provide a cost effective deal. Ongoing per annum governance - and corporate expenses of USD 40k consist of fees for the independent foundation - director and foundation supervisor. - - - Next Steps in order: - - Leave posted legal docs to the community forum(in this post) for seven days as a - period for feedback - - Open a snapshot vote to ratify the docs - - Setting up the foundation takes ~10 days - - Begin the KYC process between the foundation director and Anemoy that will take - a week or less - - Investments can then take place immediately - - *Once the DAO has voted and reached the necessary quorum, the Foundation can be - set-up immediately. - - - The Memorandum of Association is a document that contains all the conditions which - are required for the registration of the company. Articles: https://drive.google.com/file/d/1TQwIUj8_04jL3WdCeb_xJDePfyl2U4ws/view?usp=drive_link - - - The Articles of Association is a document that contains the rules and regulations - for the administration of the company. Articles: https://drive.google.com/file/d/1zTJkbPVZQxRbDIrh1vlIKrZiCUao4egk/view?usp=sharing' -start: 1712162198 -end: 1712766998 -state: closed -author: '0xa9D7713e49d2931f12019D3179ccCf7F60F02BC7' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 76164.92001878929 -scores: - - 75037.10943761255 - - 1124.739432993341 - - 3.071148183380795 -votes: 180 -quorum: 75000 -funding: - amount: 10m - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-95.yml b/public/GIPs/GIP-95.yml deleted file mode 100644 index a1e3575e..00000000 --- a/public/GIPs/GIP-95.yml +++ /dev/null @@ -1,34 +0,0 @@ -id: '0x9297cc7f6a1c8d973199bb215c071cc93c99003b6231b3953edeb1e1a2f2f408' -gip_number: '95' -url: https://snapshot.org/#/gnosis.eth/proposal/0x9297cc7f6a1c8d973199bb215c071cc93c99003b6231b3953edeb1e1a2f2f408 -title: karpatkey DAO Service Extension -body: 'After the approval of GIP-20 4 and GIP-58 5, at karpatkey DAO we have been - working steadily on the management of GnosisDAO’s treasury. Similar to other treasuries - we manage, we have seen the interest of DAOs to diversify their treasuries by adding - exposure to real world assets (“RWA”) as well as interacting with real world entities - for services in the interest of GnosisDAO. - - - We therefore propose that the scope of the treasury management services as carried - out presently, be expanded to cater for the possibility to invest in RWA.' -start: 1712163822 -end: 1712768622 -state: closed -author: '0x14D92832265eeAFDEF9e526356FEfc90105966c3' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 76197.07437188186 -scores: - - 76189.57583076625 - - 4.30528992206668 - - 3.193251193528392 -votes: 180 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-96.yml b/public/GIPs/GIP-96.yml deleted file mode 100644 index cc10c9db..00000000 --- a/public/GIPs/GIP-96.yml +++ /dev/null @@ -1,40 +0,0 @@ -id: '0x2633e7279cc1522fb233d0e9f5a361b7af97dab2a1a27cb2bbb5d169a224dda1' -gip_number: '96' -url: https://snapshot.org/#/gnosis.eth/proposal/0x2633e7279cc1522fb233d0e9f5a361b7af97dab2a1a27cb2bbb5d169a224dda1 -title: Should the GnosisDAO allow the legal conduit being set up to onboard Centrifuge - Prime, to also hold other investments, including those made by the Gnosis Builders - prior to their dissolution? -body: 'With the Dissolution of the Gnosis Builders, the bulk of the funds as approved - under GIP-38, and not yet spent, have been returned to the DAO. Some investments - are, however, currently illiquid as they were invested by the Gnosis Builders in - early stage projects. Such investments inherently carry a lesser degree of liquidity, - and may contain conditions relating to vesting, lock-ups, future delivery obligations - (e.g. upon the occurrence of a token generation or other trigger event) etc… - - - This proposal intends to seek a vote from the GnosisDAO to enable the legal conduit, - Gnosis Asset Holdings I Foundation (the “Foundation”), which is being set up to - onboard Centrifuge Prime as described in the update to GIP-91 posted here as GIP-94 - 3, to also hold other illiquid investments, including those made historically by - the Gnosis Builders.' -start: 1712164191 -end: 1712768991 -state: closed -author: '0x551A5f2e1237E0Aca27b8e1b46de461ec7EC9da0' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 76141.93852367908 -scores: - - 75017.51479787698 - - 1123.2487688880944 - - 1.1749569140072635 -votes: 206 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-97.yml b/public/GIPs/GIP-97.yml deleted file mode 100644 index 2f24e47d..00000000 --- a/public/GIPs/GIP-97.yml +++ /dev/null @@ -1,69 +0,0 @@ -id: '0x242016595b38af98c3297271ab75c530ebc3dd1c1ec6264bf9b4483003be4bce' -gip_number: '97' -url: https://snapshot.org/#/gnosis.eth/proposal/0x242016595b38af98c3297271ab75c530ebc3dd1c1ec6264bf9b4483003be4bce -title: GIP-97 - karpatkey SafeDAO <> GnosisDAO Joint Treasury Delegation -body: "## Abstract\n\nWith the SafeDAO having achieved all milestones laid out in\ - \ [SEP #3](https://snapshot.org/#/safe.eth/proposal/0xdcd7f8cb197c7132296d802e538df2a565fbe4f8af400f1afbed06b54a808060)\ - \ and approaching its token transferability, we propose to delegate treasury management\ - \ of the joint SafeDAO <> GnosisDAO treasury to karpatkey. \n\nThis proposal is\ - \ being passed in duplicate through Safe governance: https://forum.safe.global/t/draft-karpatkey-safe-dao-treasury-management-core-unit/4893?u=karpatkey.\ - \ With the passing of this proposal, GIP-97, GnosisDAO shall vote favourably on\ - \ the corresponding SafeDAO proposal.\n\n\n\n## Motivation\n\nHaving accomplished\ - \ the objectives outlined in [SEP #3](https://snapshot.org/#/safe.eth/proposal/0xdcd7f8cb197c7132296d802e538df2a565fbe4f8af400f1afbed06b54a808060),\ - \ including the creation of a constitution, a governance framework, a system for\ - \ resource distribution, and the definition of token utility, SafeDAO has completed\ - \ all the necessary steps for its token transferability.\n\nWith the foundational\ - \ elements of SafeDAO in place, the focus naturally shifts to the efficient and\ - \ strategic management of the DAO's assets. Alongside the token transferability,\ - \ the unlocking of the [joint treasury](https://etherscan.io/address/0xd28b432f06cb64692379758b88b5fcdfc4f56922)\ - \ between GnosisDAO and SafeDAO will take place. We propose delegating the joint\ - \ treasury management to karpatkey as part of the mandate.\n\n## Specificaiton\n\ - \nAccording to [GIP-29](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ - \ 5% of the SAFE tokens are allocated to a shared treasury by SafeDAO and GnosisDAO\ - \ intended to fund rewards beneficial to both the Safe and Gnosis communities.\n\ - \nWe propose that GnosisDAO entrust the management of this collective treasury to\ - \ karpatkey as an extension of [GIP-58](https://snapshot.org/#/gnosis.eth/proposal/0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8).\ - \ With karpatkey's deep involvement in both projects it is positioned optimally\ - \ to manage the joint treasury efficiently and align the interests of both communities.\n\ - \nThe joint treasury will be used to create liquid Safe markets with up to 2.5M\ - \ $SAFE used for incentivising $SAFE DEX liquidity on the Gnosis Chain.\n\nAdditionally,\ - \ the joint treasury will be used to provide liquidity for Safe on Ethereum and\ - \ Gnosis Chain as well as support the Safe price. Upon potential diversification\ - \ of the treasury in the future, karpatkey shall also use these assets for staking\ - \ (ETH / GNO), LPing or other means to gather yield on the assets. Given the initial\ - \ 100% treasury composition of native tokens (SAFE), karpatkey will provide a more\ - \ detailed strategy as these become feasible.\n\nThe joint treasury will be included\ - \ on our [reports page](https://reports.karpatkey.com/), allowing the community\ - \ to monitor positions and actions taken with the treasury holdings.\n\n### Implementation\n\ - \nTo implement active treasury management and make the delegation effective the\ - \ current signers, Safe Foundation and Gnosis DAO, will amend the existing joint\ - \ treasury safe to a 3/6 MS with 2 karpatkey signers, 4 signers to be appointed\ - \ by the current signers, and a Module Safe controlled by SafeDAO and GnosisDAO\ - \ which itself will always have full control over the joint treasury. \n\nA corresponding\ - \ Safe will also be deployed on Gnosis to expand the joint treasury's presence to\ - \ the chain.\n\n### Fees\n\n2% annual fee on assets under management, paid in monthly\ - \ instalments in either ETH, stablecoins or Safe token at the discretion of karpatkey\ - \ and what is feasible based on the treasury composition.\n\nFees are calculated\ - \ as `jointTreasury * 0.02 / 12` at 23:59 UTC on the last day of each month and\ - \ will be paid from the joint treasury." -start: 1712433300 -end: 1713038100 -state: closed -author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 75988.38713778465 -scores: - - 75980.34006851442 - - 5.036181883591896 - - 3.010887386638278 -votes: 216 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-98.yml b/public/GIPs/GIP-98.yml deleted file mode 100644 index 84dec6d3..00000000 --- a/public/GIPs/GIP-98.yml +++ /dev/null @@ -1,54 +0,0 @@ -id: '0x185609896381d3e5e77bcf025b1618e8d107e862c0de34a942408964cca56527' -gip_number: '98' -url: https://snapshot.org/#/gnosis.eth/proposal/0x185609896381d3e5e77bcf025b1618e8d107e862c0de34a942408964cca56527 -title: Should GnosisDAO invest in HOPR to kickstart development of GnosisVPN? -body: 'Abstract - - To strengthen Gnosis’ positioning as a leader in resilient web3 infrastructure, - GnosisDAO would invest into HOPR to foster Gnosis’ focus on privacy. HOPR would - then build Gnosis VPN, a truly private and decentralized VPN on top of the HOPR - mixnet. To increase Gnosis DAO’s oversight, this effort will be split into two: - this proposal and a follow up proposal for further development after initial work - has been presented within 9 months. - - - Within the framework of this first proposal, HOPR would build a set of VPN (virtual - private network) libraries for privately relaying HTTP calls and responses and a - proof of concept Gnosis VPN browser extension. Working over the HOPR mixnet, this - first extension will give users fully metadata-private access to a set of predefined - Gnosis Dapps from their web browsers. In particular, this will allow users to interact - with a full suite of crypto services without revealing their IP address or geolocation - to the respective web servers. - - - These libraries and proof of concept browser extension would be supported with an - investment of $1.5m to form the basis for GnosisVPN, a fully decentralized VPN service - tailored to web3 users. The scaling and UX work needed to bridge these two versions - would be the subject of a future proposal, contingent on the successful completion - of the deliverables in this proposal. - - - In addition to the product development, GnosisDAO will receive HOPR tokens at a - 30% discount on the 90-day $HOPR TWAP, ending on the day the proposal passes for - their $1.5m investment.' -start: 1713271811 -end: 1713876611 -state: closed -author: '0x14D92832265eeAFDEF9e526356FEfc90105966c3' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 76674.06091568555 -scores: - - 76628.84115966388 - - 43.00987849905545 - - 2.209877522599347 -votes: 169 -quorum: 75000 -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-99.yml b/public/GIPs/GIP-99.yml deleted file mode 100644 index d7041b85..00000000 --- a/public/GIPs/GIP-99.yml +++ /dev/null @@ -1,171 +0,0 @@ -id: gip-99-should-gnosis-guild-steward-gnosisdao-governance -gip_number: 99 -url: https://forum.gnosis.io/t/gip-99-should-gnosis-guild-steward-gnosisdao-governance -title: Should Gnosis Guild steward GnosisDAO Governance? -body: "## Category\n\nService Agreements\n\n## Executive Summary\n\nGnosis Guild proposes\ - \ to steward GnosisDAO governance, guiding a new phase of innovation, experimentation,\ - \ and growth. As GnosisDAO continues allocating resources to Gnosis Chain, Gnosis\ - \ Pay, and other mission-aligned ventures, our team will drive the DAO’s governance\ - \ strategy and operations through dedicated R&D, technical implementation, and ongoing\ - \ stewardship.\n\nWhile Gnosis Guild has been actively contributing to the maintenance\ - \ and improvement of GnosisDAO governance since its inception, this proposal will\ - \ formalize a long-term partnership that prioritizes the following objectives:\n\ - \n * Improve, maintain, and secure GnosisDAO governance infrastructure.\n * Foster\ - \ the growth and further decentralization of the Gnosis Ecosystem.\n * Position\ - \ GnosisDAO as leading innovators of DAO governance.\n\n\n\nThrough these guiding\ - \ stars, Gnosis Guild will also address the challenges currently faced by GnosisDAO’s\ - \ governance. Initiatives includes: (1) designing a new governance architecture\ - \ and roadmap to tackle the operational inefficiency of its monolithic governance\ - \ patterns, (2) introducing novel funding mechanisms to address its inefficient\ - \ capital allocation and lackluster ecosystem development, and (3) progressively\ - \ decentralizing DAO processes to increase governance activity, transparency, and\ - \ participation.\n\nOur annual funding request is 0.3% of AUM, 50% in USDC and 50%\ - \ in GNO (at the 200-day moving average at the time of allocation and locked for\ - \ one year), paid monthly to Gnosis Guild coinciding with karpatkey’s monthly treasury\ - \ report.\n\n**About Gnosis Guild:** _Gnosis Guild is a web3-native venture studio\ - \ with the values of conviviality, co-ownership, and experimentation at its heart.\ - \ For over three years, our team’s modular tooling and needs-driven development\ - \ have secured and operationalized the GnosisDAO’s governance and treasury asset\ - \ management. These include: Zodiac Reality Module for decentralized Snapshot governance;\ - \ Zodiac Roles and bespoke tooling for karpatkey’s non-custodial asset management;\ - \ custom strategies for delegation; token locking and distribution systems for CoW\ - \ and Safe; and support and development for other GnosisDAO initiatives like Hashi\ - \ and Gnosis Pay._\n\n## Service Description\n\nGnosis Guild will guide GnosisDAO’s\ - \ governance through strategic R&D, technical implementation, and ongoing stewardship.\ - \ In response to community feedback and motivated by our commitment to needs-driven\ - \ development for the GnosisDAO, we have outlined objectives that will inform our\ - \ overarching governance strategy and initiatives that address key areas for improvement.\n\ - \n### Objectives:\n\n 1. **Improve, maintain, and secure GnosisDAO governance infrastructure.**\ - \ \n**Indicator:** Increased utility and adoption of GNO as a governance token\ - \ through enhanced voting participation and token utilization.\n\n 2. **Foster\ - \ the growth and further decentralization of the Gnosis Ecosystem.** \n**Indicator:**\ - \ A thriving ecosystem with multiple transparent funding mechanisms and active engagement\ - \ from top-tier external contributors.\n\n 3. **Position GnosisDAO as leading innovators\ - \ of DAO governance.** \n**Indicator:** Novel governance infrastructure and ongoing\ - \ initiatives to integrate emerging tech.\n\n\n\n\n### Key Performance Indicators:\n\ - \n 1. Improvement in annual total vote weight utilized\n 2. Improvement in annual\ - \ total voter turnout\n 3. Increased allocation of annual total resources per approved\ - \ proposals\n\n\n\nWe will use the consistent evaluation of these variables on an\ - \ ongoing basis to measure our impact on our outlined objectives. By measuring vote\ - \ weight utilization, voter turnout, and resource allocation, we can explicitly\ - \ measure governance engagement and implicitly measure proposal quality. While resource\ - \ allocation is inconsistently documented across proposals to date, we estimate\ - \ that an increase in the ratio of total proposed funds to allocated funds would\ - \ correlate with an increase in proposal approvals and quality. We will evaluate\ - \ each proposal individually, but due to the historically significant variation\ - \ in engagement between proposals, our KPIs will be measured on a yearly time period\ - \ to reflect macro trends. For example: from 2022 to 2023, there was a 73% decrease\ - \ in proposals generated, a 66% decrease in total voters, and a 79% decrease in\ - \ total vote weight utilized. While the causes of changes in governance engagement\ - \ are speculative, our intuition is that market dynamics, major events (xDai merger),\ - \ and governance stewardship were contributing factors.\n\n### Initiatives:\n\n\ - A new architecture and roadmap for governance\n\n * Problem: GnosisDAO’s monolithic\ - \ governance pattern limits operational efficiency and innovative potential.\n \ - \ * Solution: Develop a new architecture and roadmap to enhance agility and innovation,\ - \ focused on multiple types of roles, organizational units, and parallel governance\ - \ processes.\n\n\n\nNovel funding mechanisms to foster the Gnosis Ecosystem\n\n\ - \ * Problem: Opaque ecosystem funding mechanisms hinder capital allocation and\ - \ ecosystem development.\n * Solution: Implement novel funding mechanisms to scale\ - \ and grow the Gnosis Ecosystem, fostering transparency and capital efficiency.\n\ - \n\n\nProgressive decentralization of DAO processes\n\n * Problem: Low governance\ - \ participation reflects a perceived lack of value in committing resources.\n *\ - \ Solution: Facilitate progressive decentralization of DAO processes for greater\ - \ resilience and trustlessness, creating a more automated, efficient, and permissionless\ - \ functioning for the DAO.\n\n\n\n### 1\\. Key aspects\n\n**A new architecture and\ - \ roadmap for governance**\n\nThe current governance process only allows one path\ - \ for DAO action, namely GIPs. This monolithic structure can be very time consuming\ - \ and involve significant risk on both the contributor and DAO sides, along with\ - \ implying high voter bandwidth. Creating multiple types of roles, organizational\ - \ units, and parallel governance processes within the DAO will serve to decentralize\ - \ decision-making, reduce bottlenecks, improve bandwidth, and diversify the DAO’s\ - \ ability to adapt and respond. Safe Guardians, OP Badge Holders, and ENS working\ - \ groups are a few examples. By effectively delegating clearly scoped responsibilities\ - \ to autonomous groups, GnosisDAO can improve its organizational efficiency while\ - \ reducing the governance overhead of its top layer governance. We will develop\ - \ an evolving architecture, with ongoing innovation and experimentation, to remain\ - \ agile to dynamic needs.\n\n**Novel funding mechanisms to foster the Gnosis Ecosystem**\n\ - \nTo scale and grow the Gnosis Ecosystem, we will design and implement novel funding\ - \ mechanisms for maximum capital efficiency. Multiple paths to ecosystem funding\ - \ would enable more autonomous contributions, with clear directives and expectations.\ - \ Optimism and Arbitrum have set an excellent example here, and their ecosystem\ - \ growth is a clear reflection. Frameworks like RetroPGF, ARB’s STIP + multiple\ - \ grants programs, and Safe’s OBRA are all promising directions. Based on their\ - \ successes and pitfalls, we will develop our own mechanism suited to the Gnosis\ - \ Ecosystem.\n\n**Progressive decentralization of DAO processes**\n\nBy developing\ - \ modular, composable DAO governance processes, we will increase decentralization\ - \ and transparency. In reducing any single point of failure, the DAO will have greater\ - \ resilience and trustlessness. With the development of new onchain mechanisms,\ - \ we will create a more automated, efficient, and permissionless functioning for\ - \ the DAO.\n\n### 2\\. Service Scope\n\nThis proposal is solely for our work stewarding\ - \ governance of GnosisDAO. Any additional work, such as our contributions to Gnosis\ - \ Pay, Hashi, and DAO treasury management, would be out of scope.\n\n### 3\\. Service\ - \ delivery\n\n**Immediate Improvements**\n\n * Modernize the GnosisDAO’s Snapshot\ - \ strategy to correctly account for a greater diversity of GNO holders.\n * Enable\ - \ key delegation features for the DAO: split delegation, transitive delegation,\ - \ and delegation term limits.\n * Implement spam proposal filtration\n\n\n\n**Research,\ - \ Architecture, Design**\n\n * Extensive research of successful DAO governance\ - \ architectures\n * Continuous gathering of GNO stakeholder feedback\n * Iterative\ - \ design of novel mechanisms for the DAO’s operations\n * Experimentation with\ - \ parallel, tightly-scoped governance mechanisms\n * Development of a collaborative\ - \ roadmap for the DAO’s evolution\n\n\n\n**Technical Implementation**\n\n * Full-stack\ - \ and smart contract development of governance tooling\n * Implement novel governance\ - \ technologies\n\n\n\n**Continuous Stewardship and Operations**\n\n * Management\ - \ of DAO governance processes\n * Coordination of calls, feedback, and calendar\n\ - \ * Active engagement in forum to foster transparent, efficient dialogue\n * Rapid\ - \ response to emergent issues and risks\n\n\n\n### 4\\. Support\n\nGnosis Guild\ - \ will provide community technical support and ensure we have a rapid response process\ - \ to any high-risk issues related to GnosisDAO governance.\n\n## Pricing and payment\n\ - \nGnosis Guild requests an annual compensation of 0.3% AUM, paid pro rata on a monthly\ - \ cadence, coinciding with, and calculated according to, the AUM reported in karpatkey’s\ - \ treasury report for the month. The compensation should be 50% USDC and 50% GNO,\ - \ with the GNO subject to 1 year locking from the time it is distributed.\n\nPayment\ - \ Frequency | USDC Allocation | GNO Allocation \n---|---|--- \nMonthly | (AUM\ - \ * 0.003 * 0.5) / 12 | (AUM * 0.003 * 0.5) / 12 \n \n(using the 200-day moving\ - \ average price for GNO at the date of allocation)|\n\nGnosis Guild initially anticipates\ - \ 3-6 individuals working on the identified scope at any given time, with the possibility\ - \ to scale alongside treasury growth. The total cost to GnosisDAO will remain [competitive\ - \ with other top protocol DAOs](https://tokenterminal.com/resources/crypto-research/how-much-does-it-really-cost-to-run-a-dao#4-smart-contract-cyber-security-expenditure).\n\ - \n## Service Terms and Exit Strategy\n\nIf applicable the duration of the service\ - \ agreement. Please outline the terms and conditions for exiting the service agreement,\ - \ including the circumstances under which a party may terminate the agreement, and\ - \ any other important details.\n\nThe agreement between service provider Gnosis\ - \ Guild and organization GnosisDAO will take effect immediately upon this proposal\ - \ passing. The terms within the agreement will be valid in perpetuity, unless terminated\ - \ by either party or updated with mutual consent by both parties. GnosisDAO will\ - \ assign specific permissions to Gnosis Guild within their treasury utilizing the\ - \ Roles Modifier to enable Gnosis Guild to autonomously collect payment. Either\ - \ party may terminate the agreement at any time without cause by giving 90 days\ - \ of written notice to the other party. Upon termination, all outstanding payments\ - \ shall be made by GnosisDAO to Gnosis Guild prior to agreement on termination date.\n\ - \n## Team/ Organization\n\n[Gnosis Guild](https://www.gnosisguild.org/) will act\ - \ as an Autonomous Core Contributor for GnosisDAO. Through mutualistic partnerships\ - \ and activist R&D, our team of engineers, designers, and researchers will foster\ - \ the long-term development and sustainable growth of GnosisDAO’s network. See our\ - \ contributor list [here](https://www.notion.so/gnosisguild/ea611cd34400412cabb4121d90aaa94f?v=912defbb43d1452f9c8b66182183376f&pvs=4).\n\ - \n## Conclusion\n\nHere you can summarize your project or include anything that\ - \ wasn’t mentioned yet and is important to understand the GIP.\n\n6 Likes\n\n[GIP-101:\ - \ Should karpatkey and StableLab Establish a Delegate Program v0 for the GnosisDAO?](https://forum.gnosis.io/t/gip-draft-establish-gnosisdao-delegate-program-v0/8578/2)\n\ - \n[V2 - Should Gnosis DAO fund the continuation of the validator Monitoring Telegram\ - \ bot?](https://forum.gnosis.io/t/v2-should-gnosis-dao-fund-the-continuation-of-the-validator-monitoring-telegram-bot/8415/9)\n" -start: 1712628182 -end: null -state: - - phase-1 -author: Alex (alex@gnosisguild.org) -choices: - - For - - Against - - Abstain -scores_state: null -scores_total: null -scores: - - 0 - - 0 - - 0 -votes: null -quorum: null -funding: - amount: null - currency: null - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-None-unknown.yml b/public/GIPs/GIP-None-unknown.yml deleted file mode 100644 index 1c6efafa..00000000 --- a/public/GIPs/GIP-None-unknown.yml +++ /dev/null @@ -1,64 +0,0 @@ -id: '0x17e22a4292b52a638fb956447d7ca9a0adbd51d36dc6fc7dd10ae97dff6f878a' -gip_number: null -url: https://snapshot.org/#/gnosis.eth/proposal/0x17e22a4292b52a638fb956447d7ca9a0adbd51d36dc6fc7dd10ae97dff6f878a -title: Should Gnosis DAO conduct a $30 million buyback program? -body: 'We suggest allocating approximately 5% of the Gnosis DAO assets, primarily - SAFE, ETH, and stablecoins, to fund a $30 million buyback program. This proposal - is aimed at bringing the price of GNO above the book value. - - - - **Goals** - - * Transfer value to long-term holders by acquiring GNO below its intrinsic value. - The acquired tokens can be utilized for the growth and other initiatives of the - DAO. - - * Signal to the market a commitment to establishing a valuation floor for GNO that - consistently exceeds its book value. - - * Attract attention to the DAO''s products and community by enhancing the investment - appeal of the GNO token. - - - - **Execution** - - To maximize the efficiency and minimize the risk of frontrunning, we suggest dividing - the $30 million into two equal parts, each allocated to a certain strategy: - - 1) $15 million for CoW-TWAP order, executed at any price below the dynamically-calculated - book value over a six-month period. - - 2) $15 million at the full discretion of Karpatkey, enabling them to capitalize - on the most advantageous opportunities. - - - - While the framework and main details of the program are outlined in the proposal - and elaborated on in the forum discussion, we believe the exact details of the asset - composition, trading venues, and methods of financing buybacks (e.g., converting - altcoins to ETH to be used in the program through market makers, OTC, or onchain), - should be managed by Karpatkey. This delegation aims to minimize value leakage and - ensure optimal execution.' -start: 1717437942 -end: 1718042742 -state: closed -author: '0xFB014896319E1650FD1426A6A4f070e9286f46F1' -choices: - - For - - Against - - Abstain -scores_state: final -scores_total: 106807.52799444586 -scores: - - 87476.73086906294 - - 418.2322635466969 - - 18912.564861836232 -votes: 193 -quorum: 75000 -funding: - amount: 30,000,000 - currency: USD - confidence: 'High ' - model_used: gemini-1.5-flash diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/public/index.html b/public/index.html deleted file mode 100644 index aa069f27..00000000 --- a/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index 080d6c77..00000000 --- a/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css index b10152e3..e69de29b 100644 --- a/src/App.css +++ b/src/App.css @@ -1,229 +0,0 @@ -.App { - text-align: center; - font-family: 'Unica77', sans-serif; - width: 100%; -} - -.App-header { - background-color: #fff; - min-height: 5vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(4px + 2vmin); - padding-bottom: 1rem; -} - -/* Container */ -.container { - width: 100%; - margin: 0 auto; - padding: 20px; - box-sizing: border-box; -} - -/* Search Inputs */ -.search-inputs { - display: flex; - gap: 10px; - margin-bottom: 20px; -} - -.search-input { - border: 1px solid black; - border-radius: 0; - padding: 8px; - font-size: 14px; -} - -.search-number { - width: 80px; -} - -.search-title { - width: 250px; -} - -/* Table Styles */ -.table { - width: 100%; - table-layout: fixed; - border-collapse: separate; - border-spacing: 0; - margin-bottom: 1rem; - font-size: 1.3em; -} - -.table th, -.table td { - border-bottom: 1px solid #000; - padding: 1.4em 0; - text-align: left; - font-size: 0.7em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -/* Column Styles */ -.col-number { - width: 5%; - font-family: 'Unica77Mono', monospace; - font-size: 0.65em !important; -} - -.col-title { - width: 55%; -} - -.col-started { - width: 20%; - color: #888 !important; -} - -.col-state { - width: 7%; -} - -.col-status { - width: 7%; -} - -.col-details { - width: 6%; -} - -/* Mobile Responsiveness */ -@media (max-width: 768px) { - .container { - padding: 10px; - width: 100%; - min-width: 320px; /* Minimum width for mobile */ - overflow-x: auto; /* Allow horizontal scroll if needed */ - } - - .table { - font-size: 1em; - min-width: 100%; /* Ensure table takes full width */ - display: table !important; /* Ensure the table is displayed */ - } - - .table th, - .table td { - padding: 0.8rem 0.4rem; - min-width: auto; /* Allow cells to shrink */ - display: table-cell; /* Ensure table cells are displayed */ - } - - /* Adjusted mobile column widths */ - .col-number { - width: 15%; - } - - .col-title { - width: 40%; - } - - .col-started { - display: none; /* Hide this column on mobile if desired */ - } - - .col-state, - .col-status, - .col-details { - width: 15%; - } - - /* Search inputs for mobile */ - .search-inputs { - flex-wrap: wrap; - } - - .search-number { - width: 60px; - } - - .search-title { - width: calc(100% - 70px); - } - - /* Smaller badges and buttons for mobile */ - .badge { - padding: 0.3em 0.5em; - font-size: 0.75em; - white-space: nowrap; - } - - .btn-outline-primary { - padding: 0.25rem 0.5rem; - font-size: 0.75rem; - white-space: nowrap; - } -} - -/* Chart Styles */ -.flex-container { - display: flex; - gap: 20px; - margin: 2rem 0; - width: 100%; -} - -.flex-item { - flex: 1; -} - -.chart-container { - width: 100%; - height: 400px; -} - -@media (max-width: 768px) { - .flex-container { - flex-direction: column; - } - - .flex-item { - width: 100%; - } - - .chart-container { - height: 300px; - } -} - -/* Additional Styles */ -.badge { - font-weight: normal !important; - border-radius: 0 !important; - padding: 0.5em 0.8em; -} - -button.btn-outline-primary { - color: #1D3EFF !important; - border-color: #1D3EFF !important; - border-radius: 0 !important; -} - -button.btn-outline-primary:hover { - color: #fff !important; - background-color: #1D3EFF !important; -} - -.react-tabs__tab--selected { - border-radius: 0 !important; - border-color: #000 !important; -} - -.react-tabs__tab-list { - border-color: #000 !important; -} - -.table-striped > tbody > tr:nth-of-type(odd) > * { - --bs-table-bg-type: #fff !important; -} - -.text-body { - padding: 4em !important; -} diff --git a/src/App.js b/src/App.js deleted file mode 100644 index b8e2aef1..00000000 --- a/src/App.js +++ /dev/null @@ -1,65 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import './App.css'; -import GIPTable from './components/GIPTable.jsx'; -import GIPStats from './components/GIPStats.jsx'; -import { Tabs, Tab, TabList, TabPanel } from 'react-tabs'; -import 'react-tabs/style/react-tabs.css'; -import yaml from 'js-yaml'; - - -function App() { - const [gips, setGips] = useState([]); - - const loadGIPs = async () => { - try { - const gipFiles = Array.from({ length: 1000 }, (_, i) => `GIP-${i + 1}.yml`); - const fetchPromises = gipFiles.map(file => - fetch(`../GIPs/${file}`) - .then(response => response.ok ? response.text() : null) - .catch(() => null) - ); - const fileContents = await Promise.all(fetchPromises); - const parsedGips = fileContents - .filter(content => content !== null) - .map(content => { - try { - return yaml.load(content); - } catch (e) { - console.error("Error parsing YAML:", e); - return null; - } - }) - .filter(gip => gip !== null && typeof gip === 'object'); - setGips(parsedGips); - } catch (error) { - console.error("Error loading GIPs:", error); - } - }; - - useEffect(() => { - loadGIPs(); - }, []); - - return ( -
-
-

Gnosis Governance Dashboard

-
- - - Overview - Stats - - - - - - - - - -
- ); -} - -export default App; diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 00000000..bbc51048 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,28 @@ +import { Tab, TabList, TabPanel, Tabs } from 'react-tabs'; +import './App.css'; + +function App() { + return ( +
+

Gnosis Governance Dashboard

+
+ +
+ + + Overview + + + Stats + + +
+ {/* */} + {/* */} +
+
+
+ ); +} + +export default App; diff --git a/src/fonts/Unica77LLWeb-Bold.woff2 b/src/assets/fonts/Unica77LLWeb-Bold.woff2 similarity index 100% rename from src/fonts/Unica77LLWeb-Bold.woff2 rename to src/assets/fonts/Unica77LLWeb-Bold.woff2 diff --git a/src/fonts/Unica77LLWeb-Italic.woff2 b/src/assets/fonts/Unica77LLWeb-Italic.woff2 similarity index 100% rename from src/fonts/Unica77LLWeb-Italic.woff2 rename to src/assets/fonts/Unica77LLWeb-Italic.woff2 diff --git a/src/fonts/Unica77LLWeb-Regular.woff2 b/src/assets/fonts/Unica77LLWeb-Regular.woff2 similarity index 100% rename from src/fonts/Unica77LLWeb-Regular.woff2 rename to src/assets/fonts/Unica77LLWeb-Regular.woff2 diff --git a/src/fonts/Unica77MonoLLWeb-Regular.woff2 b/src/assets/fonts/Unica77MonoLLWeb-Regular.woff2 similarity index 100% rename from src/fonts/Unica77MonoLLWeb-Regular.woff2 rename to src/assets/fonts/Unica77MonoLLWeb-Regular.woff2 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 00000000..6c87de9b --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/DynamicChart.jsx b/src/components/DynamicChart.jsx deleted file mode 100644 index beacbf16..00000000 --- a/src/components/DynamicChart.jsx +++ /dev/null @@ -1,222 +0,0 @@ -import React, { useState, useRef, useEffect } from 'react'; -import { Chart } from 'react-chartjs-2'; -import { Chart as ChartJS, registerables } from 'chart.js'; -import annotationPlugin from 'chartjs-plugin-annotation'; - -ChartJS.register(...registerables, annotationPlugin); - - -const BarChartIcon = () => ( - - - - - - ); - - const PieChartIcon = () => ( - - - - - ); - -const DynamicChart = ({ scores, scores_total, scores_state, quorum }) => { - const [chartType, setChartType] = useState('bar'); - const [legendPosition, setLegendPosition] = useState({ x: 0, y: 0 }); - const [showLegend, setShowLegend] = useState(false); - const containerRef = useRef(null); - - useEffect(() => { - const container = containerRef.current; - - const handleMouseMove = (event) => { - if (container) { - const rect = container.getBoundingClientRect(); - const x = event.clientX - rect.left; - const y = event.clientY - rect.top; - - if (x >= 0 && x <= rect.width && y >= 0 && y <= rect.height) { - setShowLegend(true); - setLegendPosition({ x, y }); - } else { - setShowLegend(false); - } - } - }; - - const handleMouseLeave = () => { - setShowLegend(false); - }; - - if (container) { - container.addEventListener('mousemove', handleMouseMove); - container.addEventListener('mouseleave', handleMouseLeave); - } - - return () => { - if (container) { - container.removeEventListener('mousemove', handleMouseMove); - container.removeEventListener('mouseleave', handleMouseLeave); - } - }; - }, []); - - if (scores_state !== 'final') return null; - - const labels = ['For', 'Against', 'Abstain']; - const colors = ['#4caf50', '#f44336', '#ff9800']; - - const data = { - labels: labels, - datasets: [ - { - data: scores, - backgroundColor: colors, - borderColor: 'black', - borderWidth: 2 - } - ] - }; - - const options = { - responsive: true, - maintainAspectRatio: true, - plugins: { - legend: { - display: false, - }, - tooltip: { - enabled: false, - }, - annotation: chartType === 'bar' ? { - annotations: { - quorumLine: { - type: 'line', - xMin: quorum, - xMax: quorum, - borderColor: 'black', - borderWidth: 2, - borderDash: [6, 6] - } - } - } : {} - }, - ...(chartType === 'bar' ? { - indexAxis: 'y', - scales: { - x: { - beginAtZero: true, - title: { - display: true, - text: 'Amount', - color: 'black' - } - }, - y: { - title: { - display: false, - text: 'Vote Type', - color: 'black' - } - } - } - } : {}) - }; - - const legendStyle = { - position: 'absolute', - left: `${legendPosition.x + 10}px`, - top: `${legendPosition.y + 10}px`, - background: 'rgba(255, 255, 255, 0.95)', - border: '1px solid #ddd', - borderRadius: '4px', - padding: '10px', - pointerEvents: 'none', - zIndex: 1000, - fontSize: '16px', - boxShadow: '0 2px 5px rgba(0,0,0,0.2)', - }; - - const iconStyle = { - cursor: 'pointer', - padding: '5px', - borderRadius: '4px', - backgroundColor: 'rgba(255, 255, 255, 0.7)', - boxShadow: '0 1px 3px rgba(0,0,0,0.2)', - transition: 'background-color 0.3s', - }; - - return ( -
-
-
setChartType('bar')} - style={{ ...iconStyle, color: chartType === 'bar' ? '#007bff' : '#666' }} - title="Switch to Bar Chart" - > - -
-
setChartType('pie')} - style={{ ...iconStyle, color: chartType === 'pie' ? '#007bff' : '#666' }} - title="Switch to Pie Chart" - > - -
-
- - {showLegend && ( -
- - - {labels.map((label, index) => ( - - - - - ))} - - - - - - - - - - - - -
- - {label}: - - {scores[index]} ({((scores[index] / scores_total) * 100).toFixed(2)}%) -

Total:{scores_total}
Quorum:{quorum}
-
- )} -
- ); -}; - -export default DynamicChart; \ No newline at end of file diff --git a/src/components/ENSAuthorDisplay.jsx b/src/components/ENSAuthorDisplay.jsx deleted file mode 100644 index d8e5d249..00000000 --- a/src/components/ENSAuthorDisplay.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -const isEthereumAddress = (address) => { - return /^0x[a-fA-F0-9]{40}$/.test(address); -}; - -const ENSAuthorDisplay = ({ author }) => { - const [ensName, setEnsName] = useState(null); - const [isLoading, setIsLoading] = useState(false); - - useEffect(() => { - const fetchEnsName = async () => { - if (!isEthereumAddress(author)) return; - - setIsLoading(true); - try { - const response = await fetch(`https://api.ensideas.com/ens/resolve/${author}`); - const data = await response.json(); - if (data.name) { - setEnsName(data.name); - } - } catch (error) { - console.error('Error fetching ENS name:', error); - } finally { - setIsLoading(false); - } - }; - - fetchEnsName(); - }, [author]); - - if (!author) return null; - - if (isLoading) { - return Loading...; - } - - // If it's an Ethereum address, show ENS or truncated address - if (isEthereumAddress(author)) { - return ensName ? ( - {ensName} - ) : ( - {`${author.substring(0, 6)}...${author.substring(38)}`} - ); - } - - // If it's not an Ethereum address, just return the author name - return {author}; -}; - -export default ENSAuthorDisplay; \ No newline at end of file diff --git a/src/components/GIPStats.jsx b/src/components/GIPStats.jsx deleted file mode 100644 index 5b96a2e0..00000000 --- a/src/components/GIPStats.jsx +++ /dev/null @@ -1,305 +0,0 @@ -import React from 'react'; -import { Bar, Pie } from 'react-chartjs-2'; -import 'chart.js/auto'; -import zoomPlugin from 'chartjs-plugin-zoom'; -import { Chart } from 'chart.js'; -import 'bootstrap/dist/css/bootstrap.min.css'; -import '../index.css'; -import ENSAuthorDisplay from './ENSAuthorDisplay'; - -Chart.register(zoomPlugin); - -const computeState = (scores, quorum, scores_state) => { - if (scores_state !== 'final') return ''; - if (!scores || scores.length < 3) return 'invalid'; - - const [firstScore, ...otherScores] = scores; - const isHighest = otherScores.every(score => firstScore > score); - const meetsQuorum = firstScore > quorum; - return isHighest && meetsQuorum ? 'passed' : 'failed'; -}; - -const computeStatuses = (gips) => { - let passed = 0; - let failed = 0; - let open = 0; - - gips.forEach(gip => { - const state = computeState(gip.scores, gip.quorum, gip.scores_state); - if (state === 'passed') passed++; - else if (state === 'failed') failed++; - else open++; - }); - - return [passed, failed, open]; -}; - -const GIPStats = ({ gips }) => { - const [passed, failed, open] = React.useMemo(() => computeStatuses(gips), [gips]); - - const votesByGIP = React.useMemo(() => { - const votesData = gips.map(gip => ({ - x: parseInt(gip.gip_number, 10), - y: gip.votes || 0 - })); - return { - labels: gips.map(gip => parseInt(gip.gip_number, 10)), - datasets: [{ - label: 'Votes', - data: votesData, - backgroundColor: 'rgba(75, 192, 192, 0.6)', - borderColor: 'rgba(75, 192, 192, 1)', - borderWidth: 2, - }], - }; - }, [gips]); - - const scoresTotalByGIP = React.useMemo(() => { - const scoresData = gips.map(gip => ({ - x: parseInt(gip.gip_number, 10), - y: gip.scores_total || 0 - })); - - return { - labels: gips.map(gip => parseInt(gip.gip_number, 10)), - datasets: [{ - label: 'Amount', - data: scoresData, - backgroundColor: 'rgba(153, 102, 255, 0.6)', - borderColor: 'rgba(153, 102, 255, 1)', - borderWidth: 2, - }], - }; - }, [gips]); - - const authorData = React.useMemo(() => { - const authorCounts = new Map(); - - // Handle null authors by replacing with "Unknown" - gips.forEach(gip => { - const author = gip.author || "Unknown"; - const count = authorCounts.get(author) || 0; - authorCounts.set(author, count + 1); - }); - - const sortedAuthors = Array.from(authorCounts.entries()) - .sort((a, b) => b[1] - a[1]) - .slice(0, 10); - - return { - data: { - labels: new Array(sortedAuthors.length).fill(''), - datasets: [{ - label: 'Number of GIPs', - data: sortedAuthors.map(([_, count]) => count), - backgroundColor: 'rgba(54, 162, 235, 0.5)', - borderColor: 'rgba(54, 162, 235, 1)', - borderWidth: 1 - }] - }, - authors: sortedAuthors.map(([author]) => author) - }; - }, [gips]); - - const statusGIP = { - labels: ['Passed', 'Failed', 'Open'], - datasets: [{ - label: 'GIP Status', - data: [passed, failed, open], - backgroundColor: [ - 'rgba(75, 192, 192, 0.6)', // greenish - 'rgba(255, 99, 132, 0.6)', // reddish - 'rgba(255, 206, 86, 0.6)' // yellowish - ], - borderColor: [ - 'rgba(75, 192, 192, 1)', - 'rgba(255, 99, 132, 1)', - 'rgba(255, 206, 86, 1)' - ], - borderWidth: 1 - }] - }; - - const optionsAuthor = { - indexAxis: 'y', - scales: { - x: { - beginAtZero: true, - title: { - display: true, - text: 'Number of GIPs' - } - }, - y: { - ticks: { - display: false // Hide default labels - } - } - }, - plugins: { - legend: { - display: false - }, - tooltip: { - callbacks: { - label: function(context) { - return `GIPs: ${context.raw}`; - }, - title: function(context) { - const author = authorData.authors[context[0].dataIndex]; - return author; - } - } - } - }, - maintainAspectRatio: false - }; - - const options = { - plugins: { - legend: { - display: true, - position: 'left' - } - } - }; - - const chartOptions1 = { - scales: { - x: { - type: 'linear', - position: 'bottom', - ticks: { - stepSize: 1, - callback: function(value) { - if (value % 1 === 0) { - return value; - } - } - }, - min: 0, - title: { - display: true, - text: 'GIP Number' - } - }, - y: { - beginAtZero: true, - title: { - display: true, - text: 'No. of Votes' - } - } - }, - maintainAspectRatio: false, - plugins: { - zoom: { - limits: { - x: {min: 0, max: 'original', minRange: 1}, - }, - zoom: { - wheel: { - enabled: false - }, - pinch: { - enabled: true - }, - mode: 'x', - onZoomComplete: function({chart}) { - let minVal = chart.scales.x.min; - if (minVal < 0) { - chart.scales.x.min = 0; - chart.update(); - } - } - }, - pan: { - enabled: true, - mode: 'x', - onPanComplete: function({chart}) { - let minVal = chart.scales.x.min; - if (minVal < 0) { - chart.scales.x.min = 0; - chart.update(); - } - } - } - } - } - }; - - const chartOptions2 = { - ...chartOptions1, - scales: { - ...chartOptions1.scales, - y: { - beginAtZero: true, - title: { - display: true, - text: 'GNO Amount' - } - } - } - }; - - - return ( -
-

GIP Stats

-
-
-

GIPs Status

- -
-
-

Top-10 GIPs Proposers

-
-
- {authorData.authors.map((author, index) => ( -
- {author === "Unknown" ? ( - Unknown - ) : ( - - )} -
- ))} -
-
- -
-
-
-
- -
-
-

Votes by GIP

- -
-
-

Total Amount by GIP

- -
-
-
- ); -}; - -export default GIPStats; \ No newline at end of file diff --git a/src/components/GIPTable.jsx b/src/components/GIPTable.jsx deleted file mode 100644 index 02d3f3ac..00000000 --- a/src/components/GIPTable.jsx +++ /dev/null @@ -1,314 +0,0 @@ -import React, { useState, useMemo } from 'react'; -import { Table, Button, Card, Form } from 'react-bootstrap'; -import ReactMarkdown from 'react-markdown'; -import { Chart, registerables } from 'chart.js'; -import 'chart.js/auto'; -import 'bootstrap/dist/css/bootstrap.min.css'; -import '../index.css'; // Import the CSS file -import annotationPlugin from 'chartjs-plugin-annotation'; -import DynamicChart from './DynamicChart'; -import ENSAuthorDisplay from './ENSAuthorDisplay'; - -Chart.register(...registerables, annotationPlugin); - - -const GIPTable = ({ gips }) => { - const [searchTermNo, setSearchTermNo] = useState(""); - const [searchTermTitle, setSearchTermTitle] = useState(""); - const [details, setDetails] = useState([]); - //const [gips, setGips] = useState([]); - const [sortState, setSortState] = useState({ - column: 'gip_number', - state: 'desc' - }); - const [currentPage, setCurrentPage] = useState(1); - const itemsPerPage = 25; - - const columns = useMemo(() => ([ - { key: "gip_number", label: "No.", className: "col-number", sortable: true }, - { key: "title", label: "Title", className: "col-title", sortable: true }, - { key: "start", label: "Started", className: "col-started", sortable: true }, - { key: "state", label: "State", className: "col-state", sortable: true }, - { key: "status", label: "Status", className: "col-status", sortable: true }, - { key: "show_details", label: "", className: "col-details", filter: false, sorter: false }, - ]), []); - - const filteredGips = useMemo(() => { - return gips.filter(gip => { - const matchesNo = gip.gip_number.toString().toLowerCase().includes(searchTermNo.toLowerCase()); - const matchesTitle = gip.title.toLowerCase().includes(searchTermTitle.toLowerCase()); - return matchesNo && matchesTitle; - }).sort((a, b) => { - const column = sortState.column; - const order = sortState.state === 'asc' ? 1 : -1; - let valA = a[column]; - let valB = b[column]; - if (column === 'gip_number') { - valA = parseInt(valA, 10); - valB = parseInt(valB, 10); - } - return (valA < valB ? -order : valA > valB ? order : 0); - }); - }, [gips, searchTermNo, searchTermTitle, sortState]); - - const currentGips = useMemo(() => { - const startIndex = (currentPage - 1) * itemsPerPage; - return filteredGips.slice(startIndex, startIndex + itemsPerPage); - }, [filteredGips, currentPage, itemsPerPage]); - - const formatDate = (timestamp) => { - if (!timestamp) { - return ''; - } - const date = new Date(timestamp * 1000); // Convert UNIX timestamp to JS Date - return date.toLocaleDateString("en-US", { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: 'numeric', - minute: 'numeric' - }); - }; - - const getBadge_state = (state) => { - const stateMap = { - "closed": 'black', - "open": "info", - "phase-1": 'info', - "phase-2": 'info' - }; - return stateMap[state] || 'primary'; - }; - - const computeState = (scores, quorum, scores_state) => { - if (scores_state !== 'final') return ''; - if (!scores || scores.length < 3) return 'invalid'; - - const [firstScore, ...otherScores] = scores; - const isHighest = otherScores.every(score => firstScore > score); - const meetsQuorum = firstScore > quorum; - return isHighest && meetsQuorum ? 'passed' : 'failed'; - }; - - const getBadge_status = (status) => { - const statusMap = { - "passed": "success", - "failed": "danger", - "pending": "warning" - }; - return statusMap[status] || 'primary'; - }; - - const handleSorted = (column) => { - setSortState(prevState => ({ - column, - state: prevState.column === column && prevState.state === 'asc' ? 'desc' : 'asc' - })); - }; - - const toggleDetails = (id) => { - setDetails(prevDetails => { - console.log("Current details:", prevDetails); - console.log("Toggling ID:", id); - const newDetails = prevDetails.includes(id) - ? prevDetails.filter(detailId => detailId !== id) - : [...prevDetails, id]; - console.log("New details:", newDetails); - return newDetails; - }); - }; - - - const renderSortIcon = (column) => { - if (sortState.column !== column) { - return null; - } - return sortState.state === 'asc' ? '▲' : '▼'; - }; - - const handlePageChange = (newPage) => { - setCurrentPage(newPage); - }; - - const renderPagination = () => { - const totalPages = Math.ceil(filteredGips.length / itemsPerPage); - const pages = []; - for (let i = 1; i <= totalPages; i++) { - pages.push( - - ); - } - return pages; - }; - - const renderFundingInfo = (gip) => { - if (gip.funding && gip.funding.amount && gip.funding.currency) { - return `${gip.funding.amount} ${gip.funding.currency}`; - } - return 'No funding information available'; - }; - - const renderChart = (scores, scores_total, scores_state, quorum) => { - // Check if we have valid data for the chart - if (!scores || !scores.length || !scores_total) { - return null; - } - return ; - }; - - - - return ( -
-

GIPs: Gnosis Improvement Proposals

-
- setSearchTermNo(e.target.value)} - className="search-input search-number" - /> - setSearchTermTitle(e.target.value)} - className="search-input search-title" - /> -
- - - - {columns.map(col => ( - - ))} - - - - {currentGips.map(gip => ( - - - {columns.map(col => ( - - ))} - - {details.includes(gip.id) && ( - - - - )} - - ))} - -
col.sortable && handleSorted(col.key)} - > - {col.label} - {renderSortIcon(col.key)} -
- {col.key === 'show_details' ? ( - - ) : col.key === 'start' ? ( - formatDate(gip.start) - ) : col.key === 'state' ? ( - {gip.state} - ) : col.key === 'status' ? ( - {computeState(gip.scores, gip.quorum, gip.scores_state)} - ) : ( - gip[col.key] - )} -
- - {/* Title Section */} -

- GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title} -

- - {/* Metadata Card */} - - -
-
-

- No.: - {parseInt(gip.gip_number, 10) || 0} -

-

- Author: -

-

- Started: - {formatDate(gip.start)} -

-

- Proposal: - {gip.url ? ( - - link - - ) : 'No link available'} -

-
-
-

- {gip.scores_state !== 'final' ? 'Ending' : 'Ended'}: - {formatDate(gip.end)} -

-

- Requested Funding: - {renderFundingInfo(gip)} -

-

- State: - {gip.state} - - Status: - - {computeState(gip.scores, gip.quorum, gip.scores_state)} - -

-
-
-
-
- - {/* Chart Section */} - {gip.choices && gip.scores && gip.scores.length > 0 && gip.scores_total && ( -
-
- {renderChart(gip.scores, gip.scores_total, gip.scores_state, gip.quorum)} -
-
- )} - - {/* Body Content */} - - {gip.body} - -
-
-
- {renderPagination()} -
-
- ); -}; - -export default GIPTable; \ No newline at end of file diff --git a/src/fonts/ABCMaxiRoundVariable.ttf b/src/fonts/ABCMaxiRoundVariable.ttf deleted file mode 100644 index facb8b3365a2ef99c17aa989b558917c3a3356aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412288 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

aAKOOxB(dQd9`kgq9agowD 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Ǽs-(4G=Zhps2yh8TLZd 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 z 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

rQt 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 diff --git a/src/generateYmal.js b/src/generateYmal.js deleted file mode 100644 index 8fd3456d..00000000 --- a/src/generateYmal.js +++ /dev/null @@ -1,42 +0,0 @@ -import { spawn } from 'child_process'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import fs from 'fs'; - -// Convert the URL path of the current module to a directory path -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -// Execute the Python script -const runPythonScript = () => { - // Path to the Python executable in the virtual environment - const pythonExecutable = path.join(__dirname, 'scripts/gip_scraper/bin/python'); - - // Log file paths - const stdoutLog = path.join(__dirname, 'logs/python_stdout.log'); - const stderrLog = path.join(__dirname, 'logs/python_stderr.log'); - - // Ensure log directory exists - fs.mkdirSync(path.join(__dirname, 'logs'), { recursive: true }); - - // Spawn the Python process using the virtual environment's Python executable - const pythonProcess = spawn(pythonExecutable, ['src/scripts/snapshot_crawler.py']); - - // Handle standard output - pythonProcess.stdout.on('data', (data) => { - console.log(data.toString()); - fs.appendFileSync(stdoutLog, data); - }); - - // Handle error output - pythonProcess.stderr.on('data', (data) => { - console.error(data.toString()); - fs.appendFileSync(stderrLog, data); - }); - - // Handle process exit - pythonProcess.on('close', (code) => { - console.log(`Python script exited with code ${code}`); - }); -}; - -runPythonScript(); diff --git a/src/index.css b/src/index.css index d670b9b0..9e58c7ca 100644 --- a/src/index.css +++ b/src/index.css @@ -1,365 +1,41 @@ -@font-face { - font-family: 'Unica77'; - src: url('./fonts/Unica77LLWeb-Regular.woff2') format('woff2'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Unica77'; - src: url('./fonts/Unica77LLWeb-Bold.woff2') format('woff2'); - font-weight: bold; - font-style: normal; -} - -@font-face { - font-family: 'Unica77'; - src: url('./fonts/Unica77LLWeb-Italic.woff2') format('woff2'); - font-weight: normal; - font-style: italic; -} - -@font-face { - font-family: 'Unica77Mono'; - src: url('./fonts/Unica77MonoLLWeb-Regular.woff2') format('woff2'); - font-weight: normal; - font-style: normal; -} - -/* Global Styles */ -body, html { - margin: 0; - padding: 3em 0; - width: 100%; - overflow-x: hidden; - font-family: 'Unica77', sans-serif; - background: #fff; - box-sizing: border-box; -} - -#app { - width: 100%; - margin-top: 60px; -} - -h1, h2, h3, h4, h5, h6, p { - font-family: 'Unica77', sans-serif; -} - -h1 { - font-size: 56px !important; -} - -.container { - width: calc(100% - 40px); - max-width: 100%; - padding: 20px; - box-sizing: border-box; -} - -.container p { - font-size: 1em; -} - -/* Table Styles */ -.table { - background-color: white; - border: none !important; - border-collapse: separate; - border-spacing: 0; - table-layout: fixed; - width: 100%; - font-size: 1.3em; -} - -.table th, -.table td { - border: none; - font-size: 0.7em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - padding: 1.4em 0 !important; -} - -.table th { - cursor: pointer; - font-weight: bold; -} - -.table th, -.table td { - border-bottom: 1px solid #000; -} - -.table-striped > tbody > tr:nth-of-type(odd) > * { - --bs-table-bg-type: #fff !important; -} - -.text-body { - padding: 4em !important; -} - -p.text-muted { - margin-bottom: 0 !important; -} - -h4 { - padding-top: 2em; -} - -.react-tabs__tab--selected { - border-radius: 0 !important; - border-color: #000 !important; -} - -.react-tabs__tab-list { - border-color: #000 !important; -} - -.sort-icon { - margin-left: 5px; - font-size: 0.8em; -} - -/* Search Input Styles */ -.search-input { - font-size: 1em; - padding: 10px; - margin-bottom: 20px; - width: 25%; - box-sizing: border-box; - border: 1px solid black; - border-radius: 0 !important; -} - -.search-inputs { - display: flex; - align-items: flex-start; - margin-bottom: 20px; -} - -.search-input { - margin-right: 10px; - height: auto; -} - -.search-number { - flex: 0 1 10%; -} - -.search-title { - flex: 0 1 45%; - align-self: stretch; -} - -/* Text Alignment */ -.left-align { - text-align: left; -} - -.text-body.left-align { - padding: 20px; - white-space: normal; - width: 100%; -} - -/* Column Styles */ -.col-number { - width: 50px; - font-family: 'Unica77Mono', monospace; - font-size: 0.65em !important; -} - -.col-number, -.col-title, -.col-started, -.col-state, -.col-status, -.col-type, -.col-details { - vertical-align: middle; - line-height: 1; -} - -.col-title { - width: 400px; -} - -.col-started { - width: 150px; - color: #888 !important; -} - -.col-state { - width: 60px; -} - -.col-status { - width: 60px; -} - -.col-type { - width: 50px; -} - -.col-details { - width: 50px; -} - -/* Card Styles */ -.card-body { - text-align: left; -} - -.badge { - font-weight: normal !important; -} - -.badge, -button { - border-radius: 0 !important; -} - -button.btn-primary { - background-color: #1D3EFF !important; -} - -button.btn-outline-primary { - color: #1D3EFF !important; - border-color: #1D3EFF !important; -} - -button.btn-outline-primary:hover { - color: #fff !important; - background-color: #1D3EFF !important; -} - -/* Chart Container Styles */ -.chart-container { - position: relative; - width: 100%; - height: auto; - max-width: 700px; - margin: 0 auto; -} - -.pie-chart-container { - position: relative; - width: 100%; - max-width: 400px; - margin: 0 auto; - aspect-ratio: 1 / 1; /* Maintain a square aspect ratio */ -} - -/* Flex Container Adjustments */ -.flex-container { - display: flex; - flex-direction: column; - gap: 2rem; /* Increased gap */ -} - -.flex-item { - flex: 0 0 auto; - width: 100%; - min-width: 0; - margin-bottom: 2rem; /* Add margin-bottom for vertical spacing */ -} - -.flex-item h3 { - margin-top: 0; - margin-bottom: 1rem; -} - -@media (min-width: 768px) { - .flex-container { - flex-direction: row; - gap: 2rem; +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + @font-face { + font-family: 'Unica77 LL'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/src/assets/fonts/Unica77LLWeb-Regular.woff2') format('woff2'); } - .flex-item { - margin-bottom: 0; /* Remove extra space when items are in a row */ + @font-face { + font-family: 'Unica77 LL'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/src/assets/fonts/Unica77LLWeb-Bold.woff2') format('woff2'); } -} -/* Ensure Charts Do Not Grow Indefinitely on Small Screens */ -@media (max-width: 768px) { - .chart-container { - max-height: 400px; /* Adjust as needed */ + @font-face { + font-family: 'Unica77 LL'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url('/src/assets/fonts/Unica77LLWeb-Italic.woff2') format('woff2'); } -} - -/* Chart Wrapper for Better Containment */ -.chart-wrapper { - position: relative; - width: 100%; - padding-top: 75%; /* 4:3 aspect ratio */ - margin-bottom: 1rem; -} - -.chart-wrapper .chart-container { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - height: 100% !important; -} - -/* Chart.js Tooltip Styles */ -#chartjs-tooltip { - background-color: rgba(255, 255, 255, 0.9); - border: 1px solid rgba(0, 0, 0, 0.8); - border-radius: 4px; - color: #000; - padding: 10px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); - font-family: Arial, sans-serif; - font-size: 14px; - pointer-events: none; -} - -#chartjs-tooltip table { - margin: 0; - padding: 0; - border-collapse: collapse; -} - -#chartjs-tooltip th { - font-weight: bold; - border-bottom: 1px solid #ddd; - padding-bottom: 5px; - margin-bottom: 5px; -} - -#chartjs-tooltip td { - padding: 2px 0; -} -#chartjs-tooltip td span { - display: inline-block; - width: 10px; - height: 10px; - margin-right: 5px; -} - -/* Additional Styles */ -.gip-title { - font-size: 2rem; - line-height: 1.3; - word-wrap: break-word; - white-space: normal; - margin: 1.5rem 0; - padding: 0 1rem; -} - -.metadata-card { - background-color: #f8f9fa; - border-radius: 0.5rem; - margin-bottom: 2rem; -} + @font-face { + font-family: 'Unica77 Mono LL'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/src/assets/fonts/Unica77MonoLLWeb-Regular.woff2') format('woff2'); + } -.ens-names { - font-size: 14px; - line-height: 1.2; + html { + font-family: 'Unica77 LL', sans-serif; + } } diff --git a/src/index.js b/src/index.js deleted file mode 100644 index a538f8c6..00000000 --- a/src/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App.js'; -import reportWebVitals from './reportWebVitals.js'; - -const container = document.getElementById('root'); -const root = ReactDOM.createRoot(container); - -root.render( - - - -); - -reportWebVitals(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 00000000..bef5202a --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3ad..00000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/scripts/.env.test b/src/scripts/.env.test deleted file mode 100644 index 1abeb1da..00000000 --- a/src/scripts/.env.test +++ /dev/null @@ -1 +0,0 @@ -GEMINI_API_KEY \ No newline at end of file diff --git a/src/scripts/requirements.txt b/src/scripts/requirements.txt deleted file mode 100644 index 3ba9974d..00000000 --- a/src/scripts/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -requests -pyyaml -beautifulsoup4 -html2text -google-generativeai -python-dotenv \ No newline at end of file diff --git a/src/scripts/setup_environment.sh b/src/scripts/setup_environment.sh deleted file mode 100644 index f5602fd6..00000000 --- a/src/scripts/setup_environment.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# Get the directory where the script is located -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" - -# Setup or confirm virtual environment -ENV_DIR="$SCRIPT_DIR/gip_scraper" -if [ ! -d "$ENV_DIR" ]; then - echo "Setting up a new Python virtual environment..." - python3 -m venv "$ENV_DIR" -else - echo "Using existing virtual environment." -fi - -# Activate the virtual environment -source "$ENV_DIR/bin/activate" - -# Install or update dependencies -echo "Installing requirements from requirements.txt..." -pip install -r "$SCRIPT_DIR/requirements.txt" - -echo "Environment setup is complete." diff --git a/src/scripts/snapshot_crawler.py b/src/scripts/snapshot_crawler.py deleted file mode 100644 index a6e734b5..00000000 --- a/src/scripts/snapshot_crawler.py +++ /dev/null @@ -1,455 +0,0 @@ -import warnings -warnings.filterwarnings("ignore", category=FutureWarning) -warnings.filterwarnings("ignore", category=UserWarning) - -import requests -import yaml -import re -import os -import logging -from bs4 import BeautifulSoup -import html2text -from datetime import datetime -import time -from dotenv import load_dotenv -import google.generativeai as genai -from collections import deque - -# Set up logging -logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') -logger = logging.getLogger(__name__) - -print("Current working directory:", os.getcwd()) - -load_dotenv() - -# Configure the Gemini API -GEMINI_API_KEY = os.getenv('GEMINI_API_KEY') -genai.configure(api_key=GEMINI_API_KEY) - -class CustomDumper(yaml.SafeDumper): - def increase_indent(self, flow=False, indentless=False): - return super(CustomDumper, self).increase_indent(flow, False) - -class RateLimiter: - def __init__(self, max_calls, period): - self.max_calls = max_calls - self.period = period - self.calls = deque() - - def __call__(self, f): - def wrapped(*args, **kwargs): - now = time.time() - - # Remove old calls - while self.calls and now - self.calls[0] >= self.period: - self.calls.popleft() - - if len(self.calls) >= self.max_calls: - sleep_time = self.period - (now - self.calls[0]) - logger.info(f"Rate limit reached. Sleeping for {sleep_time:.2f} seconds.") - time.sleep(sleep_time) - now = time.time() - - self.calls.append(now) - return f(*args, **kwargs) - return wrapped - -# Create a rate limiter for 15 calls per 60 seconds -rate_limiter = RateLimiter(max_calls=15, period=60) - -@rate_limiter -def extract_funding_info(text): - try: - model = genai.GenerativeModel('gemini-1.5-flash') - prompt = f""" - Extract funding information from the following text. If funding is mentioned, provide the amount and currency. If no funding is mentioned, say 'No funding mentioned'. - - Text: {text[:1000]} - - Respond in the following format: - Amount: [number or 'None'] - Currency: [currency code or symbol, or 'None'] - Confidence: [High/Medium/Low] - """ - - response = model.generate_content(prompt) - result = response.text - - # Parse the result - amount_match = re.search(r'Amount: (.+)', result) - currency_match = re.search(r'Currency: (.+)', result) - confidence_match = re.search(r'Confidence: (.+)', result) - - amount = amount_match.group(1) if amount_match else None - currency = currency_match.group(1) if currency_match else None - confidence = confidence_match.group(1) if confidence_match else 'Low' - - if amount == 'None' or currency == 'None': - amount = None - currency = None - - return { - 'amount': amount, - 'currency': currency, - 'confidence': confidence, - 'model_used': 'gemini-1.5-flash' - } - - except Exception as e: - logger.error(f"Error in extract_funding_info: {str(e)}") - return { - 'amount': None, - 'currency': None, - 'confidence': None, - 'error': str(e), - 'model_used': 'none' - } - -def fetch_html_content(url): - header = {'User-Agent': 'Mozilla/5.0'} - response = requests.get(url, headers=header) - if response.status_code == 200: - return response.text - return None - -def parse_html_content(html_content): - soup = BeautifulSoup(html_content, 'html.parser') - - # Extract timestamp - time_element = soup.find('time', class_='post-time') - datetime_value = time_element['datetime'] if time_element else "" - unix_timestamp = convert_to_unix_timestamp(datetime_value) - - # Extract tags - discourse_tags = [tag.text for tag in soup.find_all('a', class_='discourse-tag')] - - # Extract meta content and title - meta_content = soup.find('meta', attrs={'name': 'description'})['content'] if soup.find('meta', attrs={'name': 'description'}) else "" - title_content = soup.title.string.split(':')[-1].replace('- GIPs - Gnosis','').strip() if soup.title else "" - - # Clean up HTML content - clean_html_content(soup) - - # Remove title from body content - # Find and remove the first h1 or h2 that contains the title - title_elements = soup.find_all(['h1', 'h2']) - for element in title_elements: - if element.get_text().strip().lower() == title_content.lower() or \ - element.get_text().strip().startswith(f"GIP-") or \ - "Should" in element.get_text(): - element.decompose() - break - - # Convert remaining content to Markdown - markdown_text = html_to_markdown(str(soup.body)) - - # Remove any remaining title-like lines from the start of the markdown - markdown_lines = markdown_text.split('\n') - while markdown_lines and ( - markdown_lines[0].strip().lower() == title_content.lower() or - markdown_lines[0].strip().startswith("# GIP-") or - "Should" in markdown_lines[0] - ): - markdown_lines.pop(0) - - # Rejoin the markdown text, skipping empty lines at the start - while markdown_lines and not markdown_lines[0].strip(): - markdown_lines.pop(0) - - markdown_text = '\n'.join(markdown_lines) - cleaned_body = clean_body_content(markdown_text) - - return cleaned_body, meta_content, title_content, unix_timestamp, discourse_tags - -def clean_body_content(body_text): - # Split into lines for processing - lines = body_text.split('\n') - - # Find where the actual content starts - content_start = 0 - in_header = False - - for i, line in enumerate(lines): - line = line.strip() - - # Skip empty lines - if not line: - continue - - # Check for header section markers - if line.startswith('GIP:') or line == '0 voters': - in_header = True - continue - - # Look for common content start markers - if (line.startswith('##') or - line.startswith('Category') or - line.startswith('Executive Summary') or - line.startswith('Simple Summary') or - line.startswith('Abstract') or - line.startswith('Motivation')): - content_start = i - break - - # If we're not in a header section and find substantial content, start here - if not in_header and len(line) > 20 and not line.startswith('*'): - content_start = i - break - - # Join remaining lines - cleaned_content = '\n'.join(lines[content_start:]) - - # Remove any leading empty lines - cleaned_content = cleaned_content.lstrip() - - return cleaned_content - -def convert_to_unix_timestamp(datetime_value): - if datetime_value: - dt_obj = datetime.strptime(datetime_value, "%Y-%m-%dT%H:%M:%SZ") - return int(time.mktime(dt_obj.timetuple())) - return "" - -def clean_html_content(soup): - elements_to_remove = [ - ('div', {'itemprop': 'comment'}), - ('header', {}), - ('footer', {}), - ('div', {'id': 'topic-title'}), - ('span', {'class': 'creator'}), - ('span', {'class': 'crawler-post-infos'}) - ] - for tag, attrs in elements_to_remove: - for element in soup.find_all(tag, attrs): - element.decompose() - -def html_to_markdown(html_content): - converter = html2text.HTML2Text() - converter.ignore_links = False - converter.body_width = 0 - return converter.handle(html_content) - -def extract_info_from_meta(content): - patterns = { - 'gip_number': r'GIP: (\d+)', - 'author': r'author: ([^,]+)', - 'state': r'status: (.*?)(?:, [a-z]+:|$)', - 'type': r'type: ([^,]+)', - 'created': r'created: (\d{4}-\d{2}-\d{2})' - } - return {key: re.search(pattern, content, re.IGNORECASE).group(1).strip() if re.search(pattern, content, re.IGNORECASE) else None - for key, pattern in patterns.items()} - -def fetch_forum_gips(base_url): - logger.info(f"Fetching GIPs from {base_url}") - max_gip = 0 - topics = [] - page = 0 - try: - while True: - url = f"{base_url}?page={page}" - response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}) - response.raise_for_status() - topic_list = response.json()['topic_list'] - new_topics = topic_list['topics'] - topics.extend(new_topics) - - for topic in new_topics: - match = re.search(r'GIP-?(\d+)', topic['slug'], re.IGNORECASE) - if match: - max_gip = max(max_gip, int(match.group(1))) - - if 'more_topics_url' not in topic_list: - break - page += 1 - logger.info(f"Fetched {len(topics)} topics, max GIP number: {max_gip}") - return max_gip, topics - except Exception as e: - logger.error(f"Error fetching forum GIPs: {str(e)}") - return 0, [] - -def fetch_snapshot_proposals(max_gip): - logger.info(f"Fetching snapshot proposals for max GIP: {max_gip}") - url = 'https://hub.snapshot.org/graphql' - payload = { - "operationName": "Proposals", - "variables": { - "first": max_gip, - "skip": 0, - "space_in": ["gnosis.eth"], - "state": "all", - "title_contains": "", - "flagged": False - }, - "query": """query Proposals($first: Int!, $skip: Int!, $state: String!, $space: String, $space_in: [String], $author_in: [String], $title_contains: String, $space_verified: Boolean, $flagged: Boolean) { - proposals(first: $first, skip: $skip, where: {space: $space, state: $state, space_in: $space_in, author_in: $author_in, title_contains: $title_contains, space_verified: $space_verified, flagged: $flagged}) { - id - title - body - start - end - state - author - created - choices - scores_state - scores_total - scores - votes - quorum - } - }""" - } - try: - response = requests.post(url, json=payload) - response.raise_for_status() - proposals = response.json()['data']['proposals'] - logger.info(f"Fetched {len(proposals)} proposals from Snapshot") - return proposals - except Exception as e: - logger.error(f"Error fetching snapshot proposals: {str(e)}") - return [] - -def extract_and_clean_gip_number(title): - match = re.search(r'GIP[- ]?(\d+)', title, re.IGNORECASE) - if match: - clean_title = re.sub(r'\s*GIP[- ]?\d+:\s*', '', title, flags=re.IGNORECASE) - return match.group(1), clean_title - return None, title - -def integrate_missing_proposals(missing_gips, forum_topics): - missing_proposals = [] - for topic in forum_topics: - slug = topic['slug'] - match = re.search(r'GIP-?(\d+)', slug, re.IGNORECASE) - if match and int(match.group(1)) in missing_gips: - url = f'https://forum.gnosis.io/t/{slug}' - html_content = fetch_html_content(url) - if html_content: - full_content, meta_content, title_content, unix_timestamp, discourse_tags = parse_html_content(html_content) - proposal_info = extract_info_from_meta(meta_content) - proposal = create_proposal_dict(slug, int(match.group(1)), title_content, full_content, unix_timestamp, discourse_tags, proposal_info) - missing_proposals.append(proposal) - return missing_proposals - -def create_proposal_dict(slug, gip_number, title, body, start, state, proposal_info): - funding_info = extract_funding_info(body) - return { - 'id': slug, - 'gip_number': gip_number, - 'title': title, - 'body': body, - 'start': start, - 'end': None, - 'state': state, - 'author': proposal_info['author'], - 'choices': ['For', 'Against', 'Abstain'], - 'scores_state': None, - 'scores_total': None, - 'scores': [0, 0, 0], - 'votes': None, - 'quorum': None, - 'funding': funding_info - } - -def create_yaml_content(proposal): - scores = proposal['scores'] - if len(scores) == 2: - scores.append(0) - return { - 'id': proposal['id'], - 'gip_number': proposal['gip_number'], - 'url': f'https://forum.gnosis.io/t/{proposal["id"]}' if proposal["id"][:3]=='gip' else f'https://snapshot.org/#/gnosis.eth/proposal/{proposal["id"]}', - 'title': proposal['title'], - 'body': proposal['body'], - 'start': proposal['start'], - 'end': proposal['end'], - 'state': proposal['state'], - 'author': proposal['author'], - 'choices': ['For', 'Against', 'Abstain'], - 'scores_state': proposal['scores_state'], - 'scores_total': proposal['scores_total'], - 'scores': scores, - 'votes': proposal['votes'], - 'quorum': proposal['quorum'], - 'funding': proposal.get('funding', {'amount': None, 'currency': None, 'confidence': None}) - } - -def save_proposal_as_yaml(proposal, gip_tracker): - gip_number = proposal['gip_number'] - start = proposal.get('start', 0) - - if gip_number: - if gip_number in gip_tracker: - max_start, file_id = gip_tracker[gip_number] - if start > max_start: - gip_tracker[gip_number] = (start, file_id + 1) - file_suffix = "" - old_file_name = f"./public/GIPs/GIP-{gip_number}.yml" - new_file_name = f"./public/GIPs/GIP-{gip_number}-redo{file_id}.yml" - if os.path.exists(old_file_name): - os.rename(old_file_name, new_file_name) - else: - file_suffix = f"-redo{file_id + 1}" - else: - gip_tracker[gip_number] = (start, 0) - file_suffix = "" - else: - file_suffix = "-unknown" - - yaml_content = create_yaml_content(proposal) - file_name = f"./public/GIPs/GIP-{gip_number}{file_suffix}.yml" - os.makedirs(os.path.dirname(file_name), exist_ok=True) - - with open(file_name, 'w') as file: - yaml.dump(yaml_content, file, Dumper=CustomDumper, allow_unicode=True, sort_keys=False) - -def main(): - try: - logger.info("Starting GIP scraping process") - base_url = 'https://forum.gnosis.io/c/dao/gips/20.json' - - max_gip, forum_topics = fetch_forum_gips(base_url) - if max_gip == 0: - logger.error("Failed to fetch GIPs from forum. Exiting.") - return - - proposals = fetch_snapshot_proposals(max_gip) - if not proposals: - logger.error("Failed to fetch proposals from Snapshot. Exiting.") - return - - processed_proposals = [] - for i, proposal in enumerate(proposals): - try: - gip_number, clean_title = extract_and_clean_gip_number(proposal['title']) - proposal['gip_number'] = gip_number - proposal['title'] = clean_title - proposal['funding'] = extract_funding_info(proposal['body']) - processed_proposals.append(proposal) - logger.info(f"Processed proposal {i+1}/{len(proposals)}: GIP-{gip_number}") - except Exception as e: - logger.error(f"Error processing proposal {proposal.get('id', 'Unknown')}: {str(e)}") - - processed_proposals = sorted(processed_proposals, key=lambda p: p['created']) - - gip_numbers_from_api = {int(p['gip_number']) for p in processed_proposals if p['gip_number']} - missing_gips = set(range(1, max_gip + 1)) - gip_numbers_from_api - - additional_proposals = integrate_missing_proposals(missing_gips, forum_topics) - processed_proposals.extend(additional_proposals) - - gip_tracker = {} - for proposal in processed_proposals: - try: - save_proposal_as_yaml(proposal, gip_tracker) - except Exception as e: - logger.error(f"Error saving proposal {proposal.get('gip_number', 'Unknown')}: {str(e)}") - - logger.info(f"Generated {len(processed_proposals)} YAML files.") - except Exception as e: - logger.error(f"An error occurred in main: {str(e)}") - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..b9600abc --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,16 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + fontFamily: { + sans: ['"Unica77 LL"', 'sans-serif'], + mono: ['"Unica77 Mono LL"', 'monospace'], + }, + }, + }, + plugins: [], +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 00000000..f867de0d --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..abcd7f0d --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..8b0f57b9 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From 77a433d8bb1ad6661e98d9aaa5a95d9696735294 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 06:19:39 +0100 Subject: [PATCH 02/21] feat: adding gip table --- package-lock.json | 1445 ++++++++++++++++++++++++++- package.json | 7 + public/GIPs/GIP-1.yml | 82 ++ public/GIPs/GIP-10.yml | 60 ++ src/App.tsx | 90 +- src/components/DynamicChart.tsx | 222 ++++ src/components/ENSAuthorDisplay.tsx | 55 + src/components/GIPTable.tsx | 319 ++++++ 8 files changed, 2229 insertions(+), 51 deletions(-) create mode 100644 public/GIPs/GIP-1.yml create mode 100644 public/GIPs/GIP-10.yml create mode 100644 src/components/DynamicChart.tsx create mode 100644 src/components/ENSAuthorDisplay.tsx create mode 100644 src/components/GIPTable.tsx diff --git a/package-lock.json b/package-lock.json index 62ff5a76..06085510 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,15 @@ "name": "gip_dashboard", "version": "0.0.0", "dependencies": { + "@types/js-yaml": "^4.0.9", + "bootstrap": "^5.3.3", + "chartjs-plugin-annotation": "^3.1.0", + "js-yaml": "^4.1.0", "react": "^18.3.1", + "react-bootstrap": "^2.10.5", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.3.1", + "react-markdown": "^9.0.1", "react-tabs": "^6.0.2" }, "devDependencies": { @@ -263,6 +270,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", @@ -938,6 +956,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "peer": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -983,6 +1007,68 @@ "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.6.tgz", + "integrity": "sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.8.0.tgz", + "integrity": "sha512-xJEOXUOTmT4FngTmhdjKFRrVVF0hwCLNPdatLCHkyS4dkiSK12cEu1Y0fjxktjJrdst9jJIc5J6ihMJCoWEN/g==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.4.9", + "@types/warning": "^3.0.0", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "peerDependencies": { + "react": ">=16.14.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.26.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz", @@ -1217,6 +1303,14 @@ "win32" ] }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1258,11 +1352,39 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -1270,17 +1392,28 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/react": { "version": "18.3.12", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "dev": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1295,6 +1428,24 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", @@ -1525,6 +1676,11 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, "node_modules/@vitejs/plugin-react": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", @@ -1636,8 +1792,7 @@ "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 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/autoprefixer": { "version": "10.4.20", @@ -1676,6 +1831,15 @@ "postcss": "^8.1.0" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1694,6 +1858,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1786,6 +1968,15 @@ } ] }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1802,6 +1993,62 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chart.js": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz", + "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==", + "peer": true, + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chartjs-plugin-annotation": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-annotation/-/chartjs-plugin-annotation-3.1.0.tgz", + "integrity": "sha512-EkAed6/ycXD/7n0ShrlT1T2Hm3acnbFhgkIEJLa0X+M6S16x0zwj1Fv4suv/2bwayCT3jGPdAtI9uLcAMToaQQ==", + "peerDependencies": { + "chart.js": ">=4.0.0" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -1838,6 +2085,11 @@ "node": ">= 6" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -1864,6 +2116,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1914,14 +2175,12 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -1934,12 +2193,44 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "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/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1952,6 +2243,15 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, + "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/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2188,6 +2488,15 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2197,6 +2506,11 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2467,6 +2781,53 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2501,6 +2862,41 @@ "node": ">=0.8.19" } }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2528,6 +2924,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2558,6 +2963,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2567,6 +2981,17 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2606,7 +3031,6 @@ "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" }, @@ -2714,6 +3138,15 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -2734,54 +3167,619 @@ "yallist": "^3.0.2" } }, - "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/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ms": { + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.2.tgz", + "integrity": "sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mz": { "version": "2.7.0", @@ -2924,6 +3922,30 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3180,6 +4202,27 @@ "react-is": "^16.13.1" } }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3220,6 +4263,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-bootstrap": { + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", + "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.6.9", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -3237,6 +4318,36 @@ "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-markdown": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", + "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -3258,6 +4369,21 @@ "react": "^18.0.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "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/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -3279,6 +4405,42 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -3434,6 +4596,15 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -3493,6 +4664,19 @@ "node": ">=8" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -3542,6 +4726,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -3664,6 +4856,24 @@ "node": ">=8.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", @@ -3682,6 +4892,11 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3730,6 +4945,101 @@ } } }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -3775,6 +5085,32 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "5.4.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", @@ -3834,6 +5170,14 @@ } } }, + "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", @@ -3975,6 +5319,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index a71a43f2..6b562890 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,15 @@ "preview": "vite preview" }, "dependencies": { + "@types/js-yaml": "^4.0.9", + "bootstrap": "^5.3.3", + "chartjs-plugin-annotation": "^3.1.0", + "js-yaml": "^4.1.0", "react": "^18.3.1", + "react-bootstrap": "^2.10.5", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.3.1", + "react-markdown": "^9.0.1", "react-tabs": "^6.0.2" }, "devDependencies": { diff --git a/public/GIPs/GIP-1.yml b/public/GIPs/GIP-1.yml new file mode 100644 index 00000000..77f33955 --- /dev/null +++ b/public/GIPs/GIP-1.yml @@ -0,0 +1,82 @@ +id: QmbSBUenuoRYYoMQ4NxmkVz3nBwfMwo3pdrBzZXR123toh +gip_number: '1' +url: https://snapshot.org/#/gnosis.eth/proposal/QmbSBUenuoRYYoMQ4NxmkVz3nBwfMwo3pdrBzZXR123toh +title: One-time 5% GNO merkledrop to active GnosisDAO participants +body: 'See the [forum post](https://forum.gnosis.io/t/gip-1-one-time-5-gno-airdrop-to-active-gnosisdao-participants/690) + for discussion and more details. + + + ## Simple Summary + + + In order to incentivize existing GNO holders to immediately become active in the + GnosisDAO, the GnosisDAO should merkledrop a 5% bonus to all Gnosis Safe addresses + that participate in GIP snapshot voting within the first month after the GnosisDAO + launches. + + + ## Abstract + + + The GnosisDAO will use a merkledrop to distribute, pro-rata, 5% of the balance GNO + balance held in Gnosis Safes and used to vote in the GnosisDAO within the first + month after the GnosisDAO launches. For example, a safe that holds 100 GNO and casts + a vote for this (or any other) GIP proposal, within the time limit, would receive + 5 GNO tokens in the merkledrop. + + + ## Motivation + + + The motivation for this proposal is to immediately activate existing and new GNO + token holders to become active in GnosisDAO governance decisions. This proposal + would also help to further distribute GNO tokens in the community. + + + ## Specification + + + The merkledrop will use an instance of Balancer Labs'' [erc20-redeemable contracts](https://github.com/balancer-labs/erc20-redeemable/tree/master/merkle) + and an instance of Balancer Labs'' [claim interface](https://claim.balancer.finance/#/). + + + More detail will be added to the specification as becomes available. + + + ## Rationale + + + A merkledrop should be used, as opposed to other designs, so as to reduce the upfront + gas cost and to require recipients to actively claim their bonus tokens. + + + ## Disclaimer + + + The plans outlined in this proposal are subject to discussion and change. They may + also need to be (re)structured to take account of legal, regulatory, or technical + developments as well as governance considerations. This document should not be taken + as the basis for making investment decisions, nor be construed as a recommendation + to engage in any transactions. You are solely responsible for your own investment + decisions and transactions.' +start: 1606107600 +end: 1606755540 +state: closed +author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 98162.4988733109 +scores: + - 65159.542577608045 + - 33002.95629570285 + - 0 +votes: 99 +quorum: 0 +funding: + amount: 5% + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash \ No newline at end of file diff --git a/public/GIPs/GIP-10.yml b/public/GIPs/GIP-10.yml new file mode 100644 index 00000000..2fdc9ab4 --- /dev/null +++ b/public/GIPs/GIP-10.yml @@ -0,0 +1,60 @@ +id: QmVdpMzXaXxWS4htWRxtux9VcaTY4zfr27xPjkoQSSEgAc +gip_number: '10' +url: https://snapshot.org/#/gnosis.eth/proposal/QmVdpMzXaXxWS4htWRxtux9VcaTY4zfr27xPjkoQSSEgAc +title: Adopt Participation Agreement +body: "### SIMPLE SUMMARY\n\nThis is a proposal to implement a private ordering agreement\ + \ (a so-called “Participation Agreement”) among all GnosisDAO participants to provide\ + \ an operating framework for the GnosisDAO and to govern the rights and obligations\ + \ of each party.\n\n### ABSTRACT\n\nThe participation agreement:\n- explains the\ + \ GnosisDAO’s governance mechanism and determines who GnosisDAO participants are.\n\ + - provides a mutual release by DAO participants from claims arising out of or in\ + \ connection with the GnosisDAO and a mutual waiver of claims against the GnosisDAO\ + \ and other DAO participants.\n- limits the liability of the GnosisDAO, the service\ + \ providers, Gnosis Limited, and the signers in relation to loss or damage arising\ + \ under or in connection with the use of GnosisDAO smart contracts.\n- provides\ + \ a complaints and dispute resolution procedure.\n\n### MOTIVATION\n\nAs a DAO that\ + \ is not wrapped within a legacy system legal entity, it is paramount to minimize\ + \ the legal risks to GnosisDAO participants as much as possible.\n\n### SPECIFICATION\n\ + \n[Proposed Participation Agreement](https://docs.google.com/document/d/1HzK3VbOJ3MLllimKquT-SPnL81lx7n1BKEOwq1hW1hE/edit?usp=sharing)\n\ + \n### RATIONALE\n\nThe GnosisDAO is a decentralised collective stewarding a growing\ + \ ecosystem by developing and dogfooding the operating system for Ethereum and is\ + \ governed by, and returns value to, the GNO token holders. It relies on the Gnosis\ + \ Safe Multisig smart contracts and Gnosis Zodiac modules for DAO governance to\ + \ enable transparent governance by the GNO token holders to manage the GnosisDAO\ + \ and control resources transparently. Although the GnosisDAO was seeded by Gnosis\ + \ Limited, Gnosis Limited has relinquished all control over the GnosisDAO. It is\ + \ participant managed, and does not have any director or manager. No single party\ + \ is in control. \n\nAs the GnosisDAO exists entirely on-chain, jurisdiction may\ + \ not recognise it as an entity with legal personality or limited liability. While\ + \ efforts are underway (notably in Wyoming, Malta and by COALA, who have been drafting\ + \ a DAO Model Law), unincorporated DAOs do not operate as persons within the eyes\ + \ of the law.\n\nThe attempted shoehorning of DAOs by legal systems into existing\ + \ categories such as unregistered organisations, unincorporated associations or\ + \ general partnerships leads to concerns that DAO participants may be held liable\ + \ for the actions of the DAO. While GnosisDAO Participants cannot dictate states\ + \ and state regulators how to characterise the GnosisDAO, we should use whatever\ + \ private law mechanism at our disposal to frame the GnosisDAO as we see it and\ + \ minimize legal risks as much as possible to the GnosisDAO, GnosisDAO participants,\ + \ Gnosis Limited as the initial funder, service providers and the signers of the\ + \ GnosisDAO Safe multisig." +start: 1624017540 +end: 1624622400 +state: closed +author: '0xC42d7E776cB079C3C3b205BD307D0CdbB2431Dd3' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 97082.13067806746 +scores: + - 97082.13067806746 + - 0 + - 0 +votes: 116 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index bbc51048..11cf3ac2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,23 +1,103 @@ import { Tab, TabList, TabPanel, Tabs } from 'react-tabs'; import './App.css'; +import { useEffect, useState } from 'react'; +// import GIPTable from './components/GIPTable'; +import yaml from 'js-yaml'; +import GIPTable from './components/GIPTable'; + +export interface GIP { + author: string, + body: string, + choices: "For" | "Against" | "Abstain", + end: number, + funding: { + amount: string, + currency: string, + } | undefined, + gip_number: string, + id: string, + quorum: number, + scores: number[], + scores_state: string, + scores_total: number, + start: number, + state: string, + title: string; + url: string, + votes: number +} function App() { + const [gips, setGips] = useState([]); + + const loadGIPs = async () => { + try { + const gipFiles = Array.from( + { length: 1000 }, + (_, i) => `GIP-${i + 1}.yml` + ); + const fetchPromises = gipFiles.map((file) => + fetch(`../GIPs/${file}`) + .then((response) => { + if (!response.ok) { + console.warn(`Error fetching ${file}: ${response.statusText}`); + return null; + } + return response.text(); + }) + .catch((error) => { + console.error(`Fetch failed for ${file}:`, error); + return null; + }) + ); + const fileContents = await Promise.all(fetchPromises); + + const parsedGips = fileContents + .filter((content): content is string => { + if (!content || content.startsWith('')) { + console.warn('Invalid file content, skipping:', content?.slice(0, 100)); + return false; + } + return true; + }) + .map((content) => { + try { + return yaml.load(content) as GIP; + } catch (e) { + console.error('Error parsing YAML:', e); + return null; + } + }) + .filter((gip): gip is GIP => gip !== null); + + setGips(parsedGips); + console.log('Parsed GIPs:', parsedGips); + } catch (error) { + console.error('Error loading GIPs:', error); + } + }; + + + useEffect(() => { + loadGIPs(); + }, []); return (

Gnosis Governance Dashboard

-
- - +
+ + Overview - + Stats +
Search Component Here
- {/* */} + {} {/* */}
diff --git a/src/components/DynamicChart.tsx b/src/components/DynamicChart.tsx new file mode 100644 index 00000000..efd10309 --- /dev/null +++ b/src/components/DynamicChart.tsx @@ -0,0 +1,222 @@ +import { useState, useRef, useEffect } from 'react'; +import { Chart } from 'react-chartjs-2'; +import { Chart as ChartJS, registerables } from 'chart.js'; +import annotationPlugin from 'chartjs-plugin-annotation'; + +ChartJS.register(...registerables, annotationPlugin); + + +const BarChartIcon = () => ( + + + + + + ); + + const PieChartIcon = () => ( + + + + + ); + +const DynamicChart = ({ scores, scores_total, scores_state, quorum }) => { + const [chartType, setChartType] = useState('bar'); + const [legendPosition, setLegendPosition] = useState({ x: 0, y: 0 }); + const [showLegend, setShowLegend] = useState(false); + const containerRef = useRef(null); + + useEffect(() => { + const container = containerRef.current; + + const handleMouseMove = (event) => { + if (container) { + const rect = container.getBoundingClientRect(); + const x = event.clientX - rect.left; + const y = event.clientY - rect.top; + + if (x >= 0 && x <= rect.width && y >= 0 && y <= rect.height) { + setShowLegend(true); + setLegendPosition({ x, y }); + } else { + setShowLegend(false); + } + } + }; + + const handleMouseLeave = () => { + setShowLegend(false); + }; + + if (container) { + container.addEventListener('mousemove', handleMouseMove); + container.addEventListener('mouseleave', handleMouseLeave); + } + + return () => { + if (container) { + container.removeEventListener('mousemove', handleMouseMove); + container.removeEventListener('mouseleave', handleMouseLeave); + } + }; + }, []); + + if (scores_state !== 'final') return null; + + const labels = ['For', 'Against', 'Abstain']; + const colors = ['#4caf50', '#f44336', '#ff9800']; + + const data = { + labels: labels, + datasets: [ + { + data: scores, + backgroundColor: colors, + borderColor: 'black', + borderWidth: 2 + } + ] + }; + + const options = { + responsive: true, + maintainAspectRatio: true, + plugins: { + legend: { + display: false, + }, + tooltip: { + enabled: false, + }, + annotation: chartType === 'bar' ? { + annotations: { + quorumLine: { + type: 'line', + xMin: quorum, + xMax: quorum, + borderColor: 'black', + borderWidth: 2, + borderDash: [6, 6] + } + } + } : {} + }, + ...(chartType === 'bar' ? { + indexAxis: 'y', + scales: { + x: { + beginAtZero: true, + title: { + display: true, + text: 'Amount', + color: 'black' + } + }, + y: { + title: { + display: false, + text: 'Vote Type', + color: 'black' + } + } + } + } : {}) + }; + + const legendStyle = { + position: 'absolute', + left: `${legendPosition.x + 10}px`, + top: `${legendPosition.y + 10}px`, + background: 'rgba(255, 255, 255, 0.95)', + border: '1px solid #ddd', + borderRadius: '4px', + padding: '10px', + pointerEvents: 'none', + zIndex: 1000, + fontSize: '16px', + boxShadow: '0 2px 5px rgba(0,0,0,0.2)', + }; + + const iconStyle = { + cursor: 'pointer', + padding: '5px', + borderRadius: '4px', + backgroundColor: 'rgba(255, 255, 255, 0.7)', + boxShadow: '0 1px 3px rgba(0,0,0,0.2)', + transition: 'background-color 0.3s', + }; + + return ( +
+
+
setChartType('bar')} + style={{ ...iconStyle, color: chartType === 'bar' ? '#007bff' : '#666' }} + title="Switch to Bar Chart" + > + +
+
setChartType('pie')} + style={{ ...iconStyle, color: chartType === 'pie' ? '#007bff' : '#666' }} + title="Switch to Pie Chart" + > + +
+
+ + {showLegend && ( +
+ + + {labels.map((label, index) => ( + + + + + ))} + + + + + + + + + + + + +
+ + {label}: + + {scores[index]} ({((scores[index] / scores_total) * 100).toFixed(2)}%) +

Total:{scores_total}
Quorum:{quorum}
+
+ )} +
+ ); +}; + +export default DynamicChart; \ No newline at end of file diff --git a/src/components/ENSAuthorDisplay.tsx b/src/components/ENSAuthorDisplay.tsx new file mode 100644 index 00000000..845f9132 --- /dev/null +++ b/src/components/ENSAuthorDisplay.tsx @@ -0,0 +1,55 @@ +import React, { useState, useEffect } from 'react'; + +const isEthereumAddress = (address: string) => { + return /^0x[a-fA-F0-9]{40}$/.test(address); +}; + +interface ENSAuthorDisplayProps { + author: string +} + +const ENSAuthorDisplay = ({ author }: ENSAuthorDisplayProps) => { + const [ensName, setEnsName] = useState(null); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + const fetchEnsName = async () => { + if (!isEthereumAddress(author)) return; + + setIsLoading(true); + try { + const response = await fetch(`https://api.ensideas.com/ens/resolve/${author}`); + const data = await response.json(); + if (data.name) { + setEnsName(data.name); + } + } catch (error) { + console.error('Error fetching ENS name:', error); + } finally { + setIsLoading(false); + } + }; + + fetchEnsName(); + }, [author]); + + if (!author) return null; + + if (isLoading) { + return Loading...; + } + + // If it's an Ethereum address, show ENS or truncated address + if (isEthereumAddress(author)) { + return ensName ? ( + {ensName} + ) : ( + {`${author.substring(0, 6)}...${author.substring(38)}`} + ); + } + + // If it's not an Ethereum address, just return the author name + return {author}; +}; + +export default ENSAuthorDisplay; \ No newline at end of file diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx new file mode 100644 index 00000000..c2599ca6 --- /dev/null +++ b/src/components/GIPTable.tsx @@ -0,0 +1,319 @@ +import React, { useState, useMemo } from 'react'; +import { Table, Button, Card, Form } from 'react-bootstrap'; +import ReactMarkdown from 'react-markdown'; +import { Chart, registerables } from 'chart.js'; +import 'chart.js/auto'; +import 'bootstrap/dist/css/bootstrap.min.css'; +import '../index.css'; +import annotationPlugin from 'chartjs-plugin-annotation'; +import DynamicChart from './DynamicChart'; +import ENSAuthorDisplay from './ENSAuthorDisplay'; +import { GIP } from '../App'; + +Chart.register(...registerables, annotationPlugin); + +interface GIPTableProps { + gips: GIP[]; +} + + +const GIPTable = ({ gips }: GIPTableProps) => { + const [searchTermNo, setSearchTermNo] = useState(""); + const [searchTermTitle, setSearchTermTitle] = useState(""); + const [details, setDetails] = useState([]); + //const [gips, setGips] = useState([]); + const [sortState, setSortState] = useState({ + column: 'gip_number', + state: 'desc' + }); + const [currentPage, setCurrentPage] = useState(1); + const itemsPerPage = 25; + + const columns = useMemo(() => ([ + { key: "gip_number", label: "No.", className: "col-number", sortable: true }, + { key: "title", label: "Title", className: "col-title", sortable: true }, + { key: "start", label: "Started", className: "col-started", sortable: true }, + { key: "state", label: "State", className: "col-state", sortable: true }, + { key: "status", label: "Status", className: "col-status", sortable: true }, + { key: "show_details", label: "", className: "col-details", filter: false, sorter: false }, + ]), []); + + const filteredGips = useMemo(() => { + return gips.filter(gip => { + const matchesNo = gip.gip_number.toString().toLowerCase().includes(searchTermNo.toLowerCase()); + const matchesTitle = gip.title.toLowerCase().includes(searchTermTitle.toLowerCase()); + return matchesNo && matchesTitle; + }).sort((a, b) => { + const column = sortState.column; + const order = sortState.state === 'asc' ? 1 : -1; + let valA = a[column]; + let valB = b[column]; + if (column === 'gip_number') { + valA = parseInt(valA, 10); + valB = parseInt(valB, 10); + } + return (valA < valB ? -order : valA > valB ? order : 0); + }); + }, [gips, searchTermNo, searchTermTitle, sortState]); + + const currentGips = useMemo(() => { + const startIndex = (currentPage - 1) * itemsPerPage; + return filteredGips.slice(startIndex, startIndex + itemsPerPage); + }, [filteredGips, currentPage, itemsPerPage]); + + const formatDate = (timestamp) => { + if (!timestamp) { + return ''; + } + const date = new Date(timestamp * 1000); // Convert UNIX timestamp to JS Date + return date.toLocaleDateString("en-US", { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: 'numeric', + minute: 'numeric' + }); + }; + + const getBadge_state = (state) => { + const stateMap = { + "closed": 'black', + "open": "info", + "phase-1": 'info', + "phase-2": 'info' + }; + return stateMap[state] || 'primary'; + }; + + const computeState = (scores, quorum, scores_state) => { + if (scores_state !== 'final') return ''; + if (!scores || scores.length < 3) return 'invalid'; + + const [firstScore, ...otherScores] = scores; + const isHighest = otherScores.every(score => firstScore > score); + const meetsQuorum = firstScore > quorum; + return isHighest && meetsQuorum ? 'passed' : 'failed'; + }; + + const getBadge_status = (status) => { + const statusMap = { + "passed": "success", + "failed": "danger", + "pending": "warning" + }; + return statusMap[status] || 'primary'; + }; + + const handleSorted = (column) => { + setSortState(prevState => ({ + column, + state: prevState.column === column && prevState.state === 'asc' ? 'desc' : 'asc' + })); + }; + + const toggleDetails = (id) => { + setDetails(prevDetails => { + console.log("Current details:", prevDetails); + console.log("Toggling ID:", id); + const newDetails = prevDetails.includes(id) + ? prevDetails.filter(detailId => detailId !== id) + : [...prevDetails, id]; + console.log("New details:", newDetails); + return newDetails; + }); + }; + + + const renderSortIcon = (column) => { + if (sortState.column !== column) { + return null; + } + return sortState.state === 'asc' ? '▲' : '▼'; + }; + + const handlePageChange = (newPage) => { + setCurrentPage(newPage); + }; + + const renderPagination = () => { + const totalPages = Math.ceil(filteredGips.length / itemsPerPage); + const pages = []; + for (let i = 1; i <= totalPages; i++) { + pages.push( + + ); + } + return pages; + }; + + const renderFundingInfo = (gip) => { + if (gip.funding && gip.funding.amount && gip.funding.currency) { + return `${gip.funding.amount} ${gip.funding.currency}`; + } + return 'No funding information available'; + }; + + const renderChart = (scores, scores_total, scores_state, quorum) => { + // Check if we have valid data for the chart + if (!scores || !scores.length || !scores_total) { + return null; + } + return ; + }; + + + + return ( +
+

GIPs: Gnosis Improvement Proposals

+
+ setSearchTermNo(e.target.value)} + className="search-input search-number" + /> + setSearchTermTitle(e.target.value)} + className="search-input search-title" + /> +
+ + + + {columns.map(col => ( + + ))} + + + + {currentGips.map(gip => ( + + + {columns.map(col => ( + + ))} + + {details.includes(gip.id) && ( + + + + )} + + ))} + +
col.sortable && handleSorted(col.key)} + > + {col.label} + {renderSortIcon(col.key)} +
+ {col.key === 'show_details' ? ( + + ) : col.key === 'start' ? ( + formatDate(gip.start) + ) : col.key === 'state' ? ( + {gip.state} + ) : col.key === 'status' ? ( + {computeState(gip.scores, gip.quorum, gip.scores_state)} + ) : ( + gip[col.key] + )} +
+ + {/* Title Section */} +

+ GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title} +

+ + {/* Metadata Card */} + + +
+
+

+ No.: + {parseInt(gip.gip_number, 10) || 0} +

+

+ Author: +

+

+ Started: + {formatDate(gip.start)} +

+

+ Proposal: + {gip.url ? ( + + link + + ) : 'No link available'} +

+
+
+

+ {gip.scores_state !== 'final' ? 'Ending' : 'Ended'}: + {formatDate(gip.end)} +

+

+ Requested Funding: + {renderFundingInfo(gip)} +

+

+ State: + {gip.state} + + Status: + + {computeState(gip.scores, gip.quorum, gip.scores_state)} + +

+
+
+
+
+ + {/* Chart Section */} + {gip.choices && gip.scores && gip.scores.length > 0 && gip.scores_total && ( +
+
+ {renderChart(gip.scores, gip.scores_total, gip.scores_state, gip.quorum)} +
+
+ )} + + {/* Body Content */} + + {gip.body} + +
+
+
+ {renderPagination()} +
+
+ ); +}; + +export default GIPTable; \ No newline at end of file From 62ee69680ed3ea0a89726a7a57336bb097c08db7 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 07:14:47 +0100 Subject: [PATCH 03/21] feat: separate gip table into gip item component --- src/components/GIPItem.tsx | 275 +++++++++++++++++++++ src/components/GIPTable.tsx | 460 +++++++++++++----------------------- 2 files changed, 433 insertions(+), 302 deletions(-) create mode 100644 src/components/GIPItem.tsx diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx new file mode 100644 index 00000000..257c513b --- /dev/null +++ b/src/components/GIPItem.tsx @@ -0,0 +1,275 @@ +import { Button, Card } from 'react-bootstrap'; +import ReactMarkdown from 'react-markdown'; +import ENSAuthorDisplay from './ENSAuthorDisplay'; +import { GIP } from '../App'; +import DynamicChart from './DynamicChart'; +import { useMemo, useState } from 'react'; + +interface GIPItemProps { + gip: GIP; +} + +const GIPItem = ({ gip }: GIPItemProps) => { + const [details, setDetails] = useState([]); + + const columns = useMemo( + () => [ + { + key: 'gip_number', + label: 'No.', + className: 'col-number', + sortable: true, + }, + { key: 'title', label: 'Title', className: 'col-title', sortable: true }, + { + key: 'start', + label: 'Started', + className: 'col-started', + sortable: true, + }, + { key: 'state', label: 'State', className: 'col-state', sortable: true }, + { + key: 'status', + label: 'Status', + className: 'col-status', + sortable: true, + }, + { + key: 'show_details', + label: '', + className: 'col-details', + filter: false, + sorter: false, + }, + ], + [] + ); + + const formatDate = (timestamp) => { + if (!timestamp) { + return ''; + } + const date = new Date(timestamp * 1000); // Convert UNIX timestamp to JS Date + return date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + }); + }; + + const toggleDetails = (id) => { + setDetails((prevDetails) => { + console.log('Current details:', prevDetails); + console.log('Toggling ID:', id); + const newDetails = prevDetails.includes(id) + ? prevDetails.filter((detailId) => detailId !== id) + : [...prevDetails, id]; + console.log('New details:', newDetails); + return newDetails; + }); + }; + + const getBadge_state = (state) => { + const stateMap = { + closed: 'black', + open: 'info', + 'phase-1': 'info', + 'phase-2': 'info', + }; + return stateMap[state] || 'primary'; + }; + + const getBadge_status = (status) => { + const statusMap = { + passed: 'success', + failed: 'danger', + pending: 'warning', + }; + return statusMap[status] || 'primary'; + }; + + const computeState = (scores, quorum, scores_state) => { + if (scores_state !== 'final') return ''; + if (!scores || scores.length < 3) return 'invalid'; + + const [firstScore, ...otherScores] = scores; + const isHighest = otherScores.every((score) => firstScore > score); + const meetsQuorum = firstScore > quorum; + return isHighest && meetsQuorum ? 'passed' : 'failed'; + }; + + const renderFundingInfo = (gip) => { + if (gip.funding && gip.funding.amount && gip.funding.currency) { + return `${gip.funding.amount} ${gip.funding.currency}`; + } + return 'No funding information available'; + }; + + const renderChart = (scores, scores_total, scores_state, quorum) => { + // Check if we have valid data for the chart + if (!scores || !scores.length || !scores_total) { + return null; + } + return ( + + ); + }; + + return ( +
+ + {columns.map((col) => ( + + {col.key === 'show_details' ? ( + + ) : col.key === 'start' ? ( + formatDate(gip.start) + ) : col.key === 'state' ? ( + + {gip.state} + + ) : col.key === 'status' ? ( + + {computeState(gip.scores, gip.quorum, gip.scores_state)} + + ) : ( + gip[col.key] + )} + + ))} + + {details.includes(gip.id) && ( + + + + {/* Title Section */} +

+ GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title} +

+ + {/* Metadata Card */} + + +
+ +
+

+ + {gip.scores_state !== 'final' ? 'Ending' : 'Ended'}:{' '} + + {formatDate(gip.end)} +

+

+ Requested Funding: + {renderFundingInfo(gip)} +

+

+ State: + + {gip.state} + + + Status: + + {computeState( + gip.scores, + gip.quorum, + gip.scores_state + )} + +

+
+
+ + + + {/* Chart Section */} + {gip.choices && + gip.scores && + gip.scores.length > 0 && + gip.scores_total && ( +
+
+ {renderChart( + gip.scores, + gip.scores_total, + gip.scores_state, + gip.quorum + )} +
+
+ )} + + {/* Body Content */} + + {gip.body} + + + + + )} +
+ ); +}; + +export default GIPItem; diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index c2599ca6..fcc088c4 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -1,319 +1,175 @@ import React, { useState, useMemo } from 'react'; -import { Table, Button, Card, Form } from 'react-bootstrap'; -import ReactMarkdown from 'react-markdown'; +import { Table, Button, Form } from 'react-bootstrap'; import { Chart, registerables } from 'chart.js'; import 'chart.js/auto'; import 'bootstrap/dist/css/bootstrap.min.css'; import '../index.css'; import annotationPlugin from 'chartjs-plugin-annotation'; -import DynamicChart from './DynamicChart'; -import ENSAuthorDisplay from './ENSAuthorDisplay'; +import GIPItem from './GIPItem'; import { GIP } from '../App'; Chart.register(...registerables, annotationPlugin); interface GIPTableProps { - gips: GIP[]; + gips: GIP[]; } - const GIPTable = ({ gips }: GIPTableProps) => { - const [searchTermNo, setSearchTermNo] = useState(""); - const [searchTermTitle, setSearchTermTitle] = useState(""); - const [details, setDetails] = useState([]); - //const [gips, setGips] = useState([]); - const [sortState, setSortState] = useState({ - column: 'gip_number', - state: 'desc' - }); - const [currentPage, setCurrentPage] = useState(1); - const itemsPerPage = 25; - - const columns = useMemo(() => ([ - { key: "gip_number", label: "No.", className: "col-number", sortable: true }, - { key: "title", label: "Title", className: "col-title", sortable: true }, - { key: "start", label: "Started", className: "col-started", sortable: true }, - { key: "state", label: "State", className: "col-state", sortable: true }, - { key: "status", label: "Status", className: "col-status", sortable: true }, - { key: "show_details", label: "", className: "col-details", filter: false, sorter: false }, - ]), []); - - const filteredGips = useMemo(() => { - return gips.filter(gip => { - const matchesNo = gip.gip_number.toString().toLowerCase().includes(searchTermNo.toLowerCase()); - const matchesTitle = gip.title.toLowerCase().includes(searchTermTitle.toLowerCase()); - return matchesNo && matchesTitle; - }).sort((a, b) => { - const column = sortState.column; - const order = sortState.state === 'asc' ? 1 : -1; - let valA = a[column]; - let valB = b[column]; - if (column === 'gip_number') { - valA = parseInt(valA, 10); - valB = parseInt(valB, 10); - } - return (valA < valB ? -order : valA > valB ? order : 0); - }); - }, [gips, searchTermNo, searchTermTitle, sortState]); - - const currentGips = useMemo(() => { - const startIndex = (currentPage - 1) * itemsPerPage; - return filteredGips.slice(startIndex, startIndex + itemsPerPage); - }, [filteredGips, currentPage, itemsPerPage]); - - const formatDate = (timestamp) => { - if (!timestamp) { - return ''; + const [searchTermNo, setSearchTermNo] = useState(''); + const [searchTermTitle, setSearchTermTitle] = useState(''); + //const [gips, setGips] = useState([]); + const [sortState, setSortState] = useState({ + column: 'gip_number', + state: 'desc', + }); + const [currentPage, setCurrentPage] = useState(1); + const itemsPerPage = 25; + + const columns = useMemo( + () => [ + { + key: 'gip_number', + label: 'No.', + className: 'col-number', + sortable: true, + }, + { key: 'title', label: 'Title', className: 'col-title', sortable: true }, + { + key: 'start', + label: 'Started', + className: 'col-started', + sortable: true, + }, + { key: 'state', label: 'State', className: 'col-state', sortable: true }, + { + key: 'status', + label: 'Status', + className: 'col-status', + sortable: true, + }, + { + key: 'show_details', + label: '', + className: 'col-details', + filter: false, + sorter: false, + }, + ], + [] + ); + + const filteredGips = useMemo(() => { + return gips + .filter((gip) => { + const matchesNo = gip.gip_number + .toString() + .toLowerCase() + .includes(searchTermNo.toLowerCase()); + const matchesTitle = gip.title + .toLowerCase() + .includes(searchTermTitle.toLowerCase()); + return matchesNo && matchesTitle; + }) + .sort((a, b) => { + const column = sortState.column; + const order = sortState.state === 'asc' ? 1 : -1; + let valA = a[column]; + let valB = b[column]; + if (column === 'gip_number') { + valA = parseInt(valA, 10); + valB = parseInt(valB, 10); } - const date = new Date(timestamp * 1000); // Convert UNIX timestamp to JS Date - return date.toLocaleDateString("en-US", { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: 'numeric', - minute: 'numeric' - }); - }; - - const getBadge_state = (state) => { - const stateMap = { - "closed": 'black', - "open": "info", - "phase-1": 'info', - "phase-2": 'info' - }; - return stateMap[state] || 'primary'; - }; - - const computeState = (scores, quorum, scores_state) => { - if (scores_state !== 'final') return ''; - if (!scores || scores.length < 3) return 'invalid'; - - const [firstScore, ...otherScores] = scores; - const isHighest = otherScores.every(score => firstScore > score); - const meetsQuorum = firstScore > quorum; - return isHighest && meetsQuorum ? 'passed' : 'failed'; - }; - - const getBadge_status = (status) => { - const statusMap = { - "passed": "success", - "failed": "danger", - "pending": "warning" - }; - return statusMap[status] || 'primary'; - }; - - const handleSorted = (column) => { - setSortState(prevState => ({ - column, - state: prevState.column === column && prevState.state === 'asc' ? 'desc' : 'asc' - })); - }; - - const toggleDetails = (id) => { - setDetails(prevDetails => { - console.log("Current details:", prevDetails); - console.log("Toggling ID:", id); - const newDetails = prevDetails.includes(id) - ? prevDetails.filter(detailId => detailId !== id) - : [...prevDetails, id]; - console.log("New details:", newDetails); - return newDetails; - }); - }; - - - const renderSortIcon = (column) => { - if (sortState.column !== column) { - return null; - } - return sortState.state === 'asc' ? '▲' : '▼'; - }; - - const handlePageChange = (newPage) => { - setCurrentPage(newPage); - }; - - const renderPagination = () => { - const totalPages = Math.ceil(filteredGips.length / itemsPerPage); - const pages = []; - for (let i = 1; i <= totalPages; i++) { - pages.push( - - ); - } - return pages; - }; - - const renderFundingInfo = (gip) => { - if (gip.funding && gip.funding.amount && gip.funding.currency) { - return `${gip.funding.amount} ${gip.funding.currency}`; - } - return 'No funding information available'; - }; - - const renderChart = (scores, scores_total, scores_state, quorum) => { - // Check if we have valid data for the chart - if (!scores || !scores.length || !scores_total) { - return null; - } - return ; - }; - - - - return ( -
-

GIPs: Gnosis Improvement Proposals

-
- setSearchTermNo(e.target.value)} - className="search-input search-number" - /> - setSearchTermTitle(e.target.value)} - className="search-input search-title" - /> -
- - - - {columns.map(col => ( - - ))} - - - - {currentGips.map(gip => ( - - - {columns.map(col => ( - - ))} - - {details.includes(gip.id) && ( - - - - )} - - ))} - -
col.sortable && handleSorted(col.key)} - > - {col.label} - {renderSortIcon(col.key)} -
- {col.key === 'show_details' ? ( - - ) : col.key === 'start' ? ( - formatDate(gip.start) - ) : col.key === 'state' ? ( - {gip.state} - ) : col.key === 'status' ? ( - {computeState(gip.scores, gip.quorum, gip.scores_state)} - ) : ( - gip[col.key] - )} -
- - {/* Title Section */} -

- GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title} -

- - {/* Metadata Card */} - - -
-
-

- No.: - {parseInt(gip.gip_number, 10) || 0} -

-

- Author: -

-

- Started: - {formatDate(gip.start)} -

-

- Proposal: - {gip.url ? ( - - link - - ) : 'No link available'} -

-
-
-

- {gip.scores_state !== 'final' ? 'Ending' : 'Ended'}: - {formatDate(gip.end)} -

-

- Requested Funding: - {renderFundingInfo(gip)} -

-

- State: - {gip.state} - - Status: - - {computeState(gip.scores, gip.quorum, gip.scores_state)} - -

-
-
-
-
- - {/* Chart Section */} - {gip.choices && gip.scores && gip.scores.length > 0 && gip.scores_total && ( -
-
- {renderChart(gip.scores, gip.scores_total, gip.scores_state, gip.quorum)} -
-
- )} - - {/* Body Content */} - - {gip.body} - -
-
-
- {renderPagination()} -
-
- ); + return valA < valB ? -order : valA > valB ? order : 0; + }); + }, [gips, searchTermNo, searchTermTitle, sortState]); + + const currentGips = useMemo(() => { + const startIndex = (currentPage - 1) * itemsPerPage; + return filteredGips.slice(startIndex, startIndex + itemsPerPage); + }, [filteredGips, currentPage, itemsPerPage]); + + const handleSorted = (column) => { + setSortState((prevState) => ({ + column, + state: + prevState.column === column && prevState.state === 'asc' + ? 'desc' + : 'asc', + })); + }; + + const renderSortIcon = (column) => { + if (sortState.column !== column) { + return null; + } + return sortState.state === 'asc' ? '▲' : '▼'; + }; + + const handlePageChange = (newPage) => { + setCurrentPage(newPage); + }; + + const renderPagination = () => { + const totalPages = Math.ceil(filteredGips.length / itemsPerPage); + const pages = []; + for (let i = 1; i <= totalPages; i++) { + pages.push( + + ); + } + return pages; + }; + + return ( +
+
+ setSearchTermNo(e.target.value)} + className='search-input search-number' + /> + setSearchTermTitle(e.target.value)} + className='search-input search-title' + /> +
+ + + + {columns.map((col) => ( + + ))} + + + + {currentGips.map((gip) => ( + + ))} + +
col.sortable && handleSorted(col.key)} + > + {col.label} + {renderSortIcon(col.key)} +
+
{renderPagination()}
+
+ ); }; -export default GIPTable; \ No newline at end of file +export default GIPTable; From 58d903860a23c9315248a2de4ea63a55133dc166 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 08:00:38 +0100 Subject: [PATCH 04/21] feat: cleaning gip item component --- src/components/GIPItem.tsx | 117 ++++++++----------------------- src/components/GIPTable.tsx | 135 ++++++++---------------------------- 2 files changed, 57 insertions(+), 195 deletions(-) diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 257c513b..8669ffc2 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -1,51 +1,18 @@ -import { Button, Card } from 'react-bootstrap'; +import { Card } from 'react-bootstrap'; import ReactMarkdown from 'react-markdown'; import ENSAuthorDisplay from './ENSAuthorDisplay'; import { GIP } from '../App'; import DynamicChart from './DynamicChart'; -import { useMemo, useState } from 'react'; +import { useState } from 'react'; interface GIPItemProps { gip: GIP; } const GIPItem = ({ gip }: GIPItemProps) => { - const [details, setDetails] = useState([]); + const [open, setOpen] = useState(false); - const columns = useMemo( - () => [ - { - key: 'gip_number', - label: 'No.', - className: 'col-number', - sortable: true, - }, - { key: 'title', label: 'Title', className: 'col-title', sortable: true }, - { - key: 'start', - label: 'Started', - className: 'col-started', - sortable: true, - }, - { key: 'state', label: 'State', className: 'col-state', sortable: true }, - { - key: 'status', - label: 'Status', - className: 'col-status', - sortable: true, - }, - { - key: 'show_details', - label: '', - className: 'col-details', - filter: false, - sorter: false, - }, - ], - [] - ); - - const formatDate = (timestamp) => { + const formatDate = (timestamp: number) => { if (!timestamp) { return ''; } @@ -59,19 +26,7 @@ const GIPItem = ({ gip }: GIPItemProps) => { }); }; - const toggleDetails = (id) => { - setDetails((prevDetails) => { - console.log('Current details:', prevDetails); - console.log('Toggling ID:', id); - const newDetails = prevDetails.includes(id) - ? prevDetails.filter((detailId) => detailId !== id) - : [...prevDetails, id]; - console.log('New details:', newDetails); - return newDetails; - }); - }; - - const getBadge_state = (state) => { + const getBadge_state = (state: string) => { const stateMap = { closed: 'black', open: 'info', @@ -90,7 +45,11 @@ const GIPItem = ({ gip }: GIPItemProps) => { return statusMap[status] || 'primary'; }; - const computeState = (scores, quorum, scores_state) => { + const computeState = ( + scores: string | any[], + quorum: number, + scores_state: string + ) => { if (scores_state !== 'final') return ''; if (!scores || scores.length < 3) return 'invalid'; @@ -100,14 +59,19 @@ const GIPItem = ({ gip }: GIPItemProps) => { return isHighest && meetsQuorum ? 'passed' : 'failed'; }; - const renderFundingInfo = (gip) => { + const renderFundingInfo = (gip: GIP) => { if (gip.funding && gip.funding.amount && gip.funding.currency) { return `${gip.funding.amount} ${gip.funding.currency}`; } return 'No funding information available'; }; - const renderChart = (scores, scores_total, scores_state, quorum) => { + const renderChart = ( + scores: string | any[], + scores_total: number, + scores_state: string, + quorum: number + ) => { // Check if we have valid data for the chart if (!scores || !scores.length || !scores_total) { return null; @@ -123,41 +87,20 @@ const GIPItem = ({ gip }: GIPItemProps) => { }; return ( -
- - {columns.map((col) => ( - - {col.key === 'show_details' ? ( - - ) : col.key === 'start' ? ( - formatDate(gip.start) - ) : col.key === 'state' ? ( - - {gip.state} - - ) : col.key === 'status' ? ( - - {computeState(gip.scores, gip.quorum, gip.scores_state)} - - ) : ( - gip[col.key] - )} - - ))} - - {details.includes(gip.id) && ( +
setOpen(!open)} + > +

{gip.gip_number}

+

{gip.title}

+

{formatDate(gip.start)}

+
+

{gip.state}

+

{computeState(gip.scores, gip.quorum, gip.scores_state)}

+
+ {open && ( - + {/* Title Section */}

diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index fcc088c4..99f7271b 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -1,4 +1,4 @@ -import React, { useState, useMemo } from 'react'; +import { useState, useMemo } from 'react'; import { Table, Button, Form } from 'react-bootstrap'; import { Chart, registerables } from 'chart.js'; import 'chart.js/auto'; @@ -17,54 +17,16 @@ interface GIPTableProps { const GIPTable = ({ gips }: GIPTableProps) => { const [searchTermNo, setSearchTermNo] = useState(''); const [searchTermTitle, setSearchTermTitle] = useState(''); - //const [gips, setGips] = useState([]); const [sortState, setSortState] = useState({ column: 'gip_number', state: 'desc', }); - const [currentPage, setCurrentPage] = useState(1); - const itemsPerPage = 25; - - const columns = useMemo( - () => [ - { - key: 'gip_number', - label: 'No.', - className: 'col-number', - sortable: true, - }, - { key: 'title', label: 'Title', className: 'col-title', sortable: true }, - { - key: 'start', - label: 'Started', - className: 'col-started', - sortable: true, - }, - { key: 'state', label: 'State', className: 'col-state', sortable: true }, - { - key: 'status', - label: 'Status', - className: 'col-status', - sortable: true, - }, - { - key: 'show_details', - label: '', - className: 'col-details', - filter: false, - sorter: false, - }, - ], - [] - ); + const [visibleCount, setVisibleCount] = useState(50); const filteredGips = useMemo(() => { return gips .filter((gip) => { - const matchesNo = gip.gip_number - .toString() - .toLowerCase() - .includes(searchTermNo.toLowerCase()); + const matchesNo = gip.gip_number.toString().includes(searchTermNo); const matchesTitle = gip.title .toLowerCase() .includes(searchTermTitle.toLowerCase()); @@ -83,91 +45,48 @@ const GIPTable = ({ gips }: GIPTableProps) => { }); }, [gips, searchTermNo, searchTermTitle, sortState]); - const currentGips = useMemo(() => { - const startIndex = (currentPage - 1) * itemsPerPage; - return filteredGips.slice(startIndex, startIndex + itemsPerPage); - }, [filteredGips, currentPage, itemsPerPage]); - - const handleSorted = (column) => { - setSortState((prevState) => ({ - column, - state: - prevState.column === column && prevState.state === 'asc' - ? 'desc' - : 'asc', - })); - }; - - const renderSortIcon = (column) => { - if (sortState.column !== column) { - return null; - } - return sortState.state === 'asc' ? '▲' : '▼'; - }; + const visibleGips = useMemo(() => { + return filteredGips.slice(0, visibleCount); + }, [filteredGips, visibleCount]); - const handlePageChange = (newPage) => { - setCurrentPage(newPage); - }; - - const renderPagination = () => { - const totalPages = Math.ceil(filteredGips.length / itemsPerPage); - const pages = []; - for (let i = 1; i <= totalPages; i++) { - pages.push( - - ); - } - return pages; + const loadMore = () => { + setVisibleCount((prev) => prev + 50); }; return ( -
+
setSearchTermNo(e.target.value)} - className='search-input search-number' /> setSearchTermTitle(e.target.value)} - className='search-input search-title' />
- - - - {columns.map((col) => ( - - ))} - - - - {currentGips.map((gip) => ( - - ))} - -
col.sortable && handleSorted(col.key)} - > - {col.label} - {renderSortIcon(col.key)} -
-
{renderPagination()}
+
+ + No. + Title + Started + State + Status + Actions + + {visibleGips.map((gip) => ( + + ))} +
+ {visibleCount < filteredGips.length && ( +
+ +
+ )}
); }; From 8cb732ea7615487ce512fbe0cff68cf93d3b2978 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 08:20:45 +0100 Subject: [PATCH 05/21] feat: add more gips --- public/GIPs/GIP-1.yml | 2 +- public/GIPs/GIP-10.yml | 2 +- public/GIPs/GIP-100.yml | 122 +++++++++++++ public/GIPs/GIP-101.yml | 142 +++++++++++++++ public/GIPs/GIP-102.yml | 196 ++++++++++++++++++++ public/GIPs/GIP-103.yml | 67 +++++++ public/GIPs/GIP-104.yml | 302 +++++++++++++++++++++++++++++++ public/GIPs/GIP-105.yml | 145 +++++++++++++++ public/GIPs/GIP-106.yml | 72 ++++++++ public/GIPs/GIP-107.yml | 44 +++++ public/GIPs/GIP-108.yml | 190 +++++++++++++++++++ public/GIPs/GIP-109.yml | 38 ++++ public/GIPs/GIP-11.yml | 132 ++++++++++++++ public/GIPs/GIP-110-redo0.yml | 82 +++++++++ public/GIPs/GIP-110.yml | 112 ++++++++++++ public/GIPs/GIP-111.yml | 190 +++++++++++++++++++ public/GIPs/GIP-112.yml | 107 +++++++++++ public/GIPs/GIP-113.yml | 129 +++++++++++++ public/GIPs/GIP-114.yml | 84 +++++++++ public/GIPs/GIP-115.yml | 124 +++++++++++++ public/GIPs/GIP-12.yml | 46 +++++ public/GIPs/GIP-13.yml | 120 ++++++++++++ public/GIPs/GIP-14.yml | 120 ++++++++++++ public/GIPs/GIP-15.yml | 81 +++++++++ public/GIPs/GIP-16.yml | 42 +++++ public/GIPs/GIP-17.yml | 29 +++ public/GIPs/GIP-18.yml | 38 ++++ public/GIPs/GIP-19.yml | 29 +++ public/GIPs/GIP-2.yml | 127 +++++++++++++ public/GIPs/GIP-20.yml | 31 ++++ public/GIPs/GIP-21.yml | 34 ++++ public/GIPs/GIP-22.yml | 32 ++++ public/GIPs/GIP-23-redo0.yml | 32 ++++ public/GIPs/GIP-23.yml | 32 ++++ public/GIPs/GIP-24.yml | 30 +++ public/GIPs/GIP-25.yml | 30 +++ public/GIPs/GIP-26.yml | 60 ++++++ public/GIPs/GIP-27-redo0.yml | 33 ++++ public/GIPs/GIP-27.yml | 28 +++ public/GIPs/GIP-28.yml | 38 ++++ public/GIPs/GIP-29-redo0.yml | 26 +++ public/GIPs/GIP-29.yml | 41 +++++ public/GIPs/GIP-3.yml | 36 ++++ public/GIPs/GIP-30.yml | 37 ++++ public/GIPs/GIP-31.yml | 29 +++ public/GIPs/GIP-32.yml | 53 ++++++ public/GIPs/GIP-33.yml | 29 +++ public/GIPs/GIP-34.yml | 30 +++ public/GIPs/GIP-35.yml | 31 ++++ public/GIPs/GIP-36.yml | 34 ++++ public/GIPs/GIP-37.yml | 31 ++++ public/GIPs/GIP-38.yml | 36 ++++ public/GIPs/GIP-39.yml | 31 ++++ public/GIPs/GIP-40.yml | 39 ++++ public/GIPs/GIP-41.yml | 27 +++ public/GIPs/GIP-42.yml | 46 +++++ public/GIPs/GIP-44.yml | 35 ++++ public/GIPs/GIP-45.yml | 31 ++++ public/GIPs/GIP-46.yml | 29 +++ public/GIPs/GIP-47.yml | 29 +++ public/GIPs/GIP-48.yml | 30 +++ public/GIPs/GIP-49.yml | 48 +++++ public/GIPs/GIP-5.yml | 55 ++++++ public/GIPs/GIP-50.yml | 43 +++++ public/GIPs/GIP-51.yml | 36 ++++ public/GIPs/GIP-52.yml | 36 ++++ public/GIPs/GIP-53.yml | 69 +++++++ public/GIPs/GIP-54.yml | 134 ++++++++++++++ public/GIPs/GIP-55.yml | 44 +++++ public/GIPs/GIP-56.yml | 93 ++++++++++ public/GIPs/GIP-57.yml | 151 ++++++++++++++++ public/GIPs/GIP-58.yml | 46 +++++ public/GIPs/GIP-59.yml | 180 ++++++++++++++++++ public/GIPs/GIP-6.yml | 104 +++++++++++ public/GIPs/GIP-60.yml | 70 +++++++ public/GIPs/GIP-61.yml | 201 ++++++++++++++++++++ public/GIPs/GIP-62.yml | 239 ++++++++++++++++++++++++ public/GIPs/GIP-63.yml | 172 ++++++++++++++++++ public/GIPs/GIP-64.yml | 62 +++++++ public/GIPs/GIP-65.yml | 226 +++++++++++++++++++++++ public/GIPs/GIP-66.yml | 41 +++++ public/GIPs/GIP-67.yml | 170 +++++++++++++++++ public/GIPs/GIP-68.yml | 146 +++++++++++++++ public/GIPs/GIP-69.yml | 91 ++++++++++ public/GIPs/GIP-7.yml | 115 ++++++++++++ public/GIPs/GIP-70.yml | 37 ++++ public/GIPs/GIP-71.yml | 49 +++++ public/GIPs/GIP-72.yml | 133 ++++++++++++++ public/GIPs/GIP-73.yml | 50 +++++ public/GIPs/GIP-74-redo0.yml | 29 +++ public/GIPs/GIP-74.yml | 66 +++++++ public/GIPs/GIP-75.yml | 87 +++++++++ public/GIPs/GIP-76.yml | 59 ++++++ public/GIPs/GIP-77.yml | 87 +++++++++ public/GIPs/GIP-78.yml | 136 ++++++++++++++ public/GIPs/GIP-79.yml | 79 ++++++++ public/GIPs/GIP-8.yml | 77 ++++++++ public/GIPs/GIP-80.yml | 176 ++++++++++++++++++ public/GIPs/GIP-81.yml | 62 +++++++ public/GIPs/GIP-82.yml | 173 ++++++++++++++++++ public/GIPs/GIP-83.yml | 109 +++++++++++ public/GIPs/GIP-84.yml | 104 +++++++++++ public/GIPs/GIP-85.yml | 85 +++++++++ public/GIPs/GIP-86.yml | 57 ++++++ public/GIPs/GIP-87-redo0.yml | 75 ++++++++ public/GIPs/GIP-87.yml | 32 ++++ public/GIPs/GIP-88.yml | 206 +++++++++++++++++++++ public/GIPs/GIP-89.yml | 156 ++++++++++++++++ public/GIPs/GIP-9.yml | 106 +++++++++++ public/GIPs/GIP-90.yml | 63 +++++++ public/GIPs/GIP-91.yml | 141 +++++++++++++++ public/GIPs/GIP-92.yml | 158 ++++++++++++++++ public/GIPs/GIP-93.yml | 128 +++++++++++++ public/GIPs/GIP-94.yml | 191 +++++++++++++++++++ public/GIPs/GIP-95.yml | 34 ++++ public/GIPs/GIP-96.yml | 40 ++++ public/GIPs/GIP-97.yml | 69 +++++++ public/GIPs/GIP-98.yml | 54 ++++++ public/GIPs/GIP-99.yml | 171 +++++++++++++++++ public/GIPs/GIP-None-unknown.yml | 64 +++++++ 120 files changed, 9917 insertions(+), 2 deletions(-) create mode 100644 public/GIPs/GIP-100.yml create mode 100644 public/GIPs/GIP-101.yml create mode 100644 public/GIPs/GIP-102.yml create mode 100644 public/GIPs/GIP-103.yml create mode 100644 public/GIPs/GIP-104.yml create mode 100644 public/GIPs/GIP-105.yml create mode 100644 public/GIPs/GIP-106.yml create mode 100644 public/GIPs/GIP-107.yml create mode 100644 public/GIPs/GIP-108.yml create mode 100644 public/GIPs/GIP-109.yml create mode 100644 public/GIPs/GIP-11.yml create mode 100644 public/GIPs/GIP-110-redo0.yml create mode 100644 public/GIPs/GIP-110.yml create mode 100644 public/GIPs/GIP-111.yml create mode 100644 public/GIPs/GIP-112.yml create mode 100644 public/GIPs/GIP-113.yml create mode 100644 public/GIPs/GIP-114.yml create mode 100644 public/GIPs/GIP-115.yml create mode 100644 public/GIPs/GIP-12.yml create mode 100644 public/GIPs/GIP-13.yml create mode 100644 public/GIPs/GIP-14.yml create mode 100644 public/GIPs/GIP-15.yml create mode 100644 public/GIPs/GIP-16.yml create mode 100644 public/GIPs/GIP-17.yml create mode 100644 public/GIPs/GIP-18.yml create mode 100644 public/GIPs/GIP-19.yml create mode 100644 public/GIPs/GIP-2.yml create mode 100644 public/GIPs/GIP-20.yml create mode 100644 public/GIPs/GIP-21.yml create mode 100644 public/GIPs/GIP-22.yml create mode 100644 public/GIPs/GIP-23-redo0.yml create mode 100644 public/GIPs/GIP-23.yml create mode 100644 public/GIPs/GIP-24.yml create mode 100644 public/GIPs/GIP-25.yml create mode 100644 public/GIPs/GIP-26.yml create mode 100644 public/GIPs/GIP-27-redo0.yml create mode 100644 public/GIPs/GIP-27.yml create mode 100644 public/GIPs/GIP-28.yml create mode 100644 public/GIPs/GIP-29-redo0.yml create mode 100644 public/GIPs/GIP-29.yml create mode 100644 public/GIPs/GIP-3.yml create mode 100644 public/GIPs/GIP-30.yml create mode 100644 public/GIPs/GIP-31.yml create mode 100644 public/GIPs/GIP-32.yml create mode 100644 public/GIPs/GIP-33.yml create mode 100644 public/GIPs/GIP-34.yml create mode 100644 public/GIPs/GIP-35.yml create mode 100644 public/GIPs/GIP-36.yml create mode 100644 public/GIPs/GIP-37.yml create mode 100644 public/GIPs/GIP-38.yml create mode 100644 public/GIPs/GIP-39.yml create mode 100644 public/GIPs/GIP-40.yml create mode 100644 public/GIPs/GIP-41.yml create mode 100644 public/GIPs/GIP-42.yml create mode 100644 public/GIPs/GIP-44.yml create mode 100644 public/GIPs/GIP-45.yml create mode 100644 public/GIPs/GIP-46.yml create mode 100644 public/GIPs/GIP-47.yml create mode 100644 public/GIPs/GIP-48.yml create mode 100644 public/GIPs/GIP-49.yml create mode 100644 public/GIPs/GIP-5.yml create mode 100644 public/GIPs/GIP-50.yml create mode 100644 public/GIPs/GIP-51.yml create mode 100644 public/GIPs/GIP-52.yml create mode 100644 public/GIPs/GIP-53.yml create mode 100644 public/GIPs/GIP-54.yml create mode 100644 public/GIPs/GIP-55.yml create mode 100644 public/GIPs/GIP-56.yml create mode 100644 public/GIPs/GIP-57.yml create mode 100644 public/GIPs/GIP-58.yml create mode 100644 public/GIPs/GIP-59.yml create mode 100644 public/GIPs/GIP-6.yml create mode 100644 public/GIPs/GIP-60.yml create mode 100644 public/GIPs/GIP-61.yml create mode 100644 public/GIPs/GIP-62.yml create mode 100644 public/GIPs/GIP-63.yml create mode 100644 public/GIPs/GIP-64.yml create mode 100644 public/GIPs/GIP-65.yml create mode 100644 public/GIPs/GIP-66.yml create mode 100644 public/GIPs/GIP-67.yml create mode 100644 public/GIPs/GIP-68.yml create mode 100644 public/GIPs/GIP-69.yml create mode 100644 public/GIPs/GIP-7.yml create mode 100644 public/GIPs/GIP-70.yml create mode 100644 public/GIPs/GIP-71.yml create mode 100644 public/GIPs/GIP-72.yml create mode 100644 public/GIPs/GIP-73.yml create mode 100644 public/GIPs/GIP-74-redo0.yml create mode 100644 public/GIPs/GIP-74.yml create mode 100644 public/GIPs/GIP-75.yml create mode 100644 public/GIPs/GIP-76.yml create mode 100644 public/GIPs/GIP-77.yml create mode 100644 public/GIPs/GIP-78.yml create mode 100644 public/GIPs/GIP-79.yml create mode 100644 public/GIPs/GIP-8.yml create mode 100644 public/GIPs/GIP-80.yml create mode 100644 public/GIPs/GIP-81.yml create mode 100644 public/GIPs/GIP-82.yml create mode 100644 public/GIPs/GIP-83.yml create mode 100644 public/GIPs/GIP-84.yml create mode 100644 public/GIPs/GIP-85.yml create mode 100644 public/GIPs/GIP-86.yml create mode 100644 public/GIPs/GIP-87-redo0.yml create mode 100644 public/GIPs/GIP-87.yml create mode 100644 public/GIPs/GIP-88.yml create mode 100644 public/GIPs/GIP-89.yml create mode 100644 public/GIPs/GIP-9.yml create mode 100644 public/GIPs/GIP-90.yml create mode 100644 public/GIPs/GIP-91.yml create mode 100644 public/GIPs/GIP-92.yml create mode 100644 public/GIPs/GIP-93.yml create mode 100644 public/GIPs/GIP-94.yml create mode 100644 public/GIPs/GIP-95.yml create mode 100644 public/GIPs/GIP-96.yml create mode 100644 public/GIPs/GIP-97.yml create mode 100644 public/GIPs/GIP-98.yml create mode 100644 public/GIPs/GIP-99.yml create mode 100644 public/GIPs/GIP-None-unknown.yml diff --git a/public/GIPs/GIP-1.yml b/public/GIPs/GIP-1.yml index 77f33955..e57a2bb1 100644 --- a/public/GIPs/GIP-1.yml +++ b/public/GIPs/GIP-1.yml @@ -79,4 +79,4 @@ funding: amount: 5% currency: GNO confidence: 'High ' - model_used: gemini-1.5-flash \ No newline at end of file + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-10.yml b/public/GIPs/GIP-10.yml index 2fdc9ab4..01858d54 100644 --- a/public/GIPs/GIP-10.yml +++ b/public/GIPs/GIP-10.yml @@ -57,4 +57,4 @@ funding: amount: null currency: null confidence: 'High ' - model_used: gemini-1.5-flash \ No newline at end of file + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-100.yml b/public/GIPs/GIP-100.yml new file mode 100644 index 00000000..7d49f3d0 --- /dev/null +++ b/public/GIPs/GIP-100.yml @@ -0,0 +1,122 @@ +id: gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program +gip_number: 100 +url: https://forum.gnosis.io/t/gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program +title: Should Gnosis DAO conduct a large-scale buyback program? +body: "#### Category\n\nTreasury\n\n#### TL;DR\n\nI represent [Thanefield Capital](https://thanefield.capital/),\ + \ a multi-strategy crypto fund; GNO is one of our thesis-driven investments.\n\n\ + Currently, GNO is significantly undervalued relative to its book value. To address\ + \ this, we propose initiating a large-scale buyback program. Our plan involves deploying\ + \ $30 million, representing about 5% of the estimated assets of Gnosis DAO, over\ + \ a six-month period.\n\n#### Introduction\n\nGnosis DAO has consistently been at\ + \ the forefront of innovation, successfully developing and launching products such\ + \ as Safe and CoW Protocol. These initiatives began as internal projects and were\ + \ later spun off into independent ventures. Despite these successes and several\ + \ previous rounds of buybacks, the GNO token has not adequately reflected the value\ + \ generated by these and numerous other activities.\n\nGNO is currently trading\ + \ below its book value, considering only the marketable tokens owned by Gnosis DAO.\ + \ This valuation suggests that the market is assigning a negative value to all other\ + \ Gnosis DAO assets. These assets include, but are not limited to, Gnosis Chain,\ + \ Gnosis Pay, Gnosis Wallet, Circles, a venture capital portfolio of over 40 companies,\ + \ and investments in four crypto VCs. This means that long-term GNO holders have\ + \ not financially benefited from the DAO’s successes in product development, venture\ + \ investments, and treasury management. Additionally, it becomes uneconomic to allocate\ + \ any GNO that already belong to the DAO for ecosystem growth or other initiatives,\ + \ as it would result in a negative value transfer for the DAO.\n\nGnosis DAO is\ + \ well-positioned to address this undervaluation as one of the most capitalized\ + \ DAOs, holding over $630 million in assets and ranking second only to Mantle in\ + \ terms of non-native marketable tokens. We propose initiating a substantial buyback\ + \ program to correct this disparity. If approved by a DAO vote, [@Karpatkey](/u/karpatkey)\ + \ will manage the execution of this program.\n\nIt’s important to note that this\ + \ proposal operates independently but complements the vision outlined in [Gnosis\ + \ DAO v3](https://forum.gnosis.io/t/introducing-gnosis-3-0/8252), which aims to\ + \ establish protocol-owned liquidity between GNO and portfolio projects. If approved\ + \ by the DAO, these initiatives should progress concurrently.\n\n#### Objectives\ + \ of the program\n\n 1. Transfer value from sellers to long-term holders by acquiring\ + \ GNO below its intrinsic value. The acquired tokens could then be utilized for\ + \ treasury swaps, incentives, growth initiatives, and further investments.\n 2.\ + \ Signal to the market a commitment to establishing a valuation floor for GNO that\ + \ consistently exceeds its book value.\n 3. Drive attention to the products of\ + \ the DAO. Given the attention-driven nature of the crypto market, where price often\ + \ influences fundamentals, large-scale buyback program can elevate both market perception\ + \ and fundamental value.\n\n\n\n#### Gnosis DAO assets breakdown\n\nThis discussion\ + \ is centered on the marketable tokens and illiquid venture deals & investments\ + \ in venture capital funds, specifically excluding other significant assets like\ + \ Gnosis Chain, Gnosis Pay, and Gnosis Wallet.\n\n 1. Marketable tokens\n\n\n\n\ + As of today, Gnosis DAO holds $631 million in tradable tokens, not including GNO\ + \ (this number corresponds to the assets that belong to Gnosis DAO that we could\ + \ locate onchain). This figure serves as a foundation for valuing Gnosis DAO’s assets.\ + \ It’s important to note that not all these assets are immediately liquid. For example,\ + \ approximately half of the SAFE token allocation is yet to vest. Furthermore, a\ + \ significant portion of both SAFE and OLAS tokens has been voluntarily placed into\ + \ lock-up contracts to demonstrate commitment. The primary assets in the treasury\ + \ include ETH and equivalents, SAFE, stablecoins, OLAS, and COW. In 2023, the treasury\ + \ generated $10.2 million by engaging these assets in DeFi activities.\n\n![VPau_nVKOjhDRId2w8Tz2X8ttgofE5ZE6vNrVUcJeCMbr5ZWkB_6hWJWLSScpZi57gjA3aiCVSNo1cwUqXa7b-IfTzGCs8MrTu0CXtYLQqSOAAWidd2V_3-1VYPo](https://forum.gnosis.io/uploads/default/original/2X/7/73744391d6708b211cc8dc54e50788ac005a0829.png)\n\ + \nAdditionally, Gnosis DAO has a 50% stake in the Safe <> Gnosis joint treasury,\ + \ which owns 5% of the SAFE token supply, valued at approximately $115 million currently.\ + \ These assets are not included in the above calculation.\n\n 2. Illiquid venture\ + \ deals\n\n\n\nAccording to the [list](https://forum.gnosis.io/t/introducing-gnosis-3-0/8252/3)\ + \ published by Ernst on this forum, Gnosis DAO has made about 50 venture investments\ + \ over the years either directly or through in-house Factor VC.\n\nInvestments that\ + \ remain illiquid/are not located include:\n\nFlashbots, Matter Labs (ZKsync), Aztec,\ + \ RISC Zero, IDEX, Succinct, Orca, Anoma, Zerion, POAP, ImmuneFi, WalletConnect,\ + \ [Kinetex.io](http://Kinetex.io), Fileverse, NFTfi, [Li.Fi](http://Li.Fi), Hedgey,\ + \ Azuro, Harbor, Snapshot, Diva, Phaver, Rated Network, [Mimic.fI](http://Mimic.fI),\ + \ Sablier, Coinshift, Vibe.xyz, Parcel, Mean.finance, Collab, AMMalgam, Topos, Bootnode,\ + \ Stablelab, Backed, Least Authority, Cypherock, Gateway.fm, Den, Mystiko, Shutter,\ + \ Altlayer, Karpatkey (spinoff).\n\nAdditionally, Gnosis DAO is an LP in the following\ + \ VC funds:\n\n1kx, Lightshift, LongHash Ventures, Seed Club Ventures.\n\nWhile\ + \ it is challenging to precisely value these illiquid venture deals due to many\ + \ unknown variables, this portfolio includes high-profile deals and ensures growth\ + \ in Gnosis DAO liquid treasury as these tokens launch and vest, widening the discount\ + \ at which GNO is currently trading.\n\n#### Gnosis DAO’s GNO holdings\n\nAccording\ + \ to CoinGecko, the circulating supply of GNO tokens is listed as 2,589,589, which\ + \ is valued at approximately $703 million. However, this figure does not include\ + \ 1,050,884 GNO tokens owned by Gnosis DAO, many of which were acquired through\ + \ buybacks and are unlikely to be released into circulation, at least before GNO\ + \ is back to its book value. Therefore, the actual circulating supply is reduced\ + \ to 1,538,705 GNO, amounting to approximately $424 million.\n\n#### GNO book value\n\ + \nWith our ballpark estimate of the venture book & investments in VCs at $100 million,\ + \ we arrive at $730 million in assets. With the current GNO real market cap at $424\ + \ million, it’s currently trading 42% below its book value of $475. To reach its\ + \ book value, GNO has to appreciate by about 72% based on current numbers. Since\ + \ the treasury contains volatile assets, it should be calculated dynamically as\ + \ the program progresses.\n\nIt is important to note that the book value of GNO\ + \ does not fully represent its intrinsic value, which should also account for future\ + \ cash flows generated by the DAO. Therefore, the book value should be considered\ + \ merely a baseline or minimum value before the DAO decides to spend any GNO it\ + \ already owns or acquires through this program.\n\n#### Proposed execution\n\n\ + To address the undervaluation of GNO and effectively utilize the treasury assets,\ + \ we propose allocating approximately 5% of the treasury funds, amounting to $30\ + \ million, for a structured buyback strategy. This amount will be divided into two\ + \ distinct parts, each employing a different strategy to optimize the overall impact.\n\ + \n 1. CoW-TWAP\n\n\n * Allocates $15 million over 6 months;\n * Executes orders\ + \ at any price below the dynamically calculated book value of GNO;\n * Results\ + \ into $83,333 daily buy pressure.\n\n\n 2. Discretionary, executed by Karpatkey\n\ + \n\n * Allocates $15 million;\n * Provides Karpatkey with full discretion to capitalize\ + \ on the best opportunities.\n\n\n\n#### Assessment\n\nAfter the conclusion of the\ + \ program, we should assess its results and consider whether to continue, modify,\ + \ or end the buyback strategy going forward.\n\n6 Likes\n\n[Curia Delegate Platform](https://forum.gnosis.io/t/curia-delegate-platform/8279/3)\n\ + \n[Staworth / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/2)\n\ + \n**[next page →](/t/gip-100-should-gnosis-dao-conduct-a-large-scale-buyback-program/8556?page=2)**\n" +start: 1715950894 +end: null +state: + - phase-1 +author: '<Nay' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 30 million + currency: $ + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-101.yml b/public/GIPs/GIP-101.yml new file mode 100644 index 00000000..9c9b77c6 --- /dev/null +++ b/public/GIPs/GIP-101.yml @@ -0,0 +1,142 @@ +id: '0xcdee441c9d501b9ec2127b62ca846d6ead68165163d537cc5c36d93002c17b11' +gip_number: '101' +url: https://snapshot.org/#/gnosis.eth/proposal/0xcdee441c9d501b9ec2127b62ca846d6ead68165163d537cc5c36d93002c17b11 +title: Should karpatkey and StableLab Establish a Delegate Program v0 for the GnosisDAO? +body: "## Executive Summary\nThis proposal aims to prevent the GnosisDAO from encountering\ + \ challenges related to reaching a quorum on its proposals, preventing the hindrance\ + \ of effective decision-making and governance processes. This program is designed\ + \ to improve quorum participation, increase community engagement and strengthen\ + \ the governance processes of the GnosisDAO, leading to more effective and inclusive\ + \ decision-making.\n\nThis proposal suggests electing ten delegates through a transparent\ + \ and democratic election process to increase the DAO's ability to reach a quorum\ + \ and enhance the community's participation in decision-making. \n\nEach selected\ + \ delegate will receive 5,000 GNO from the DAO Treasury, empowering them to represent\ + \ the community's interests and contribute actively to the governance of the GnosisDAO.\ + \ This delegation will last six months. This proposal distributes temporary voting\ + \ power only.\n\n\n## Specification\nThis program will delegate 5,000 GNO from the\ + \ GnosisDAO treasury to 10 candidates selected through a Snapshot voting process.\n\ + \n### Eligibility Criteria\nEach applicant must meet the following criteria to be\ + \ eligible to become a delegate in this program:\n- **Active Community Membership.**\ + \ Nominees must be active members of the GnosisDAO Community. To meet this criteria,\ + \ they will share a link to their forum account or Discord, demonstrating activity\ + \ for at least six months.\n - If they do not meet this criteria, an active member\ + \ not already participating in this program may sponsor them. Active members may\ + \ only sponsor one applicant.\n- **History of Governance Experience.** Nominees\ + \ must have governance experience as demonstrated by a history of participation\ + \ in the GnosisDAO governance process or another active DAO. To meet these criteria,\ + \ they will share a link to their relevant Snapshot or Tally profile showing a history\ + \ of governance involvement.\n- **Post a Delegate Initiative.** Nominees will post\ + \ a delegate initiative on the GnosisDAO forum that outlines the details of their\ + \ experience in DAO Governance and their approach to contributing to GnosisDAO Governance.\ + \ \n\nThese criteria are designed to ensure that the selected delegates are experienced\ + \ and committed members of the GnosisDAO community, capable of effectively representing\ + \ the community's interests and contributing to the DAO's governance.\n\n### Delegate\ + \ Selection Process\n#### Submission\nDelegates will nominate themselves by posting\ + \ interest in the official *\"Nomination Thread\"*. The nomination thread will be\ + \ posted upon passing this proposal. Please provide the instructions, date, and\ + \ template for application submission.\n\nIn addition to meeting the Eligibility\ + \ Criteria, delegates will be expected to explain (at a minimum) the following in\ + \ their application:\n- **Introduction:** Introduce themselves or the organization.\ + \ The goal is one brief paragraph.\n- **Proposed Delegate Initiative:** State their\ + \ reason for wanting to be a GnosisDAO delegate or become further involved in the\ + \ GnosisDAO. \n- **Areas of expertise:** Explain any expertise relevant to their\ + \ involvement in the GnosisDAO.\n\n\n#### Voting and Selection\nAll *qualified and\ + \ complete* submissions received during the submission phase will be placed on a\ + \ ballot. The ballot will be moved to Snapshot, and voting will be conducted using\ + \ the [weighted voting](https://docs.snapshot.org/user-guides/proposals/voting-types#weighted-voting)\ + \ strategy. \n\nVoters are encouraged to select nominations that promote diversity\ + \ and representation based on their expertise, commitment to the DAO's principles\ + \ and dedication to advancing the GnosisDAO's mission. \n\nThe **top ten** nominations\ + \ receiving the most votes will be selected to receive a 5,000 GNO delegation for\ + \ this six-month trial program.\n\n### Timeline\nA nomination thread will be opened\ + \ on the forum, and applications will be accepted for three weeks. At the end of\ + \ three weeks, eligible applications will be assembled and move to a [weighted Snapshot\ + \ vote](https://docs.snapshot.org/user-guides/proposals/voting-types#weighted-voting)\ + \ to determine the selected delegates. \n\n| Phase | Duration |\n| -----------\ + \ | -------- |\n| Phase 1: Application | 3 weeks |\n| Phase 2: Voting | 1\ + \ week |\n| Phase 3: Active Delegation Program | 6 Months |\n\nAlthough\ + \ the duration timeline is specified in this proposal, the official dates will be\ + \ established once this proposal is passed and posted in the Nomination Thread with\ + \ instructions for applying.\n### Program Duration\nThis delegate trial program\ + \ will run for six months, after which the community will review it for renewal\ + \ or deprecation.\n\n### Delegation Allocation\nEach of the ten delegates selected\ + \ will receive 5k GNO independently. The distribution is designed to provide equal\ + \ incentives for participation.\n\nThe total amount being allocated (50k GNO) was\ + \ chosen because it represents a significant amount of quorum while not meaningfully\ + \ diluting current stakeholders while still providing a boosting governance involvement.\n\ + \nkarpatkey will assist the GnosisDAO in creating ten separate SAFEs, configuring\ + \ them to the same policy as employed in the treasury management SAFEs. This set-up\ + \ will ensure the DAO retains custody of the GNO and the signer for the delegation\ + \ actions.\n\n\n### Accountability Mechanisms\nTo ensure accountability for this\ + \ program and the delegates receiving active delegations, two sets of performance\ + \ indicators will be established:\n\n#### 1. Delegate KPI's\nDelegates will be required\ + \ to maintain minimum standards of participation. These standards are:\n- Maintaining\ + \ a voting record of at least 70%.\n- Maintaining a voting reasoning communication\ + \ record of 100%.\n\n#### 2. Program KPI's\nThis KPI ensures that program facilitators\ + \ remain actively involved and promote the success of delegates:\n- Greater than\ + \ 50% of the nominated and selected delegates meet their Delegate KPIs.\n\n**Note:**\ + \ If a delegate is below these indicators at the conclusion of the trial period,\ + \ this delegate will be ineligible to participate in the next Delegate Program cycle.\ + \ Elected delegates are entering this program with the expectation of voting on\ + \ all proposals and promptly communicating their rationale for voting on the forum.\n\ + \n\n## Rationale\nAchieving a quorum on proposals is not just a procedural requirement\ + \ but a crucial factor for the smooth functioning and effectiveness of the GnosisDAO.\ + \ Quorum ensures that decisions reflect the community's consensus and that proposals\ + \ receive adequate scrutiny and deliberation before implementation. However, the\ + \ DAO needs help to reach quorum levels, leading to delays in decision-making and\ + \ potentially impacting the progress of important initiatives vital for the DAO's\ + \ growth and success.\n\nBy selecting up to 10 delegates through an election process,\ + \ we aim to bolster quorum participation and increase community engagement in governance\ + \ activities. Delegates entrusted with representing the community's interests will\ + \ actively participate in discussions, vote on proposals, and advocate for initiatives\ + \ that align with the DAO's objectives. Their involvement will enhance the diversity\ + \ of perspectives considered in decision-making and foster a more inclusive governance\ + \ process. \n\n\n## Budget\n**The total budget for this six-month trial period is\ + \ $20,000, paid in xDAI.** The budget will pay StableLab to function as the \"Program\ + \ Facilitator\". This budget pays for the work involved in assisting with this program\ + \ design and providing oversight of delegates, including ensuring delegates remain\ + \ active in meeting their participation KPIs. \n\nStablelabs will also provide a\ + \ retrospective analysis of this program's efficacy to aid the DAO's decision to\ + \ continue beyond an initial six-month trial period.\n\n#### Payment Schedule\n\n\ + | Payment | Amount |\n| ------------ | --------------------------\ + \ |\n| Month 1 | One payment of 10,000 xDAI |\n| Month 3 | One payment of 10,000\ + \ xDAI |\n| **Total** | **20,000 xDAI** |\n\nThese two payments will\ + \ be made during the months of the active delegation phase following a successful\ + \ selection of delegates.\n\n## Evaluation\nThis program will be evaluated by successfully\ + \ completing the KPIs established in this proposal. A DAO vote will be required\ + \ to continue it beyond the initial six-month trial period.\n\n## Team/ Organization\n\ + karpatkey and StableLab are jointly presenting this proposal. StableLab will serve\ + \ the role of \"Program Facilitator\", providing oversight and upkeep, while karpatkey\ + \ will provide support in setting up the SAFEs.\n\n- **karpatkey** will support\ + \ the technical implementation of the Gnosis Delegate Program by initiating the\ + \ required SAFEs to achieve multiple delegations. karpatkey will also assist in\ + \ receiving the payment requests from StableLab. As an already established and compensated\ + \ service provider, karpatkey will provide these services under existing agreements.\n\ + \n- **StableLab** (*\"Program Facilitator\"*) will facilitate the governance frameworks\ + \ and non-technical operations required to execute the Gnosis Delegate Program so\ + \ that all elected delegates maintain their KPIs. This measure ensures that the\ + \ Delegate Program operates effectively and in the community's best interests. StableLab\ + \ has experience establishing, running, and actively participating in delegate programs\ + \ across DAOs such as Aave, Uniswap, 1inch, Balancer, Safe, etc.\n\n### Points of\ + \ Contact\n- karpatkey: @coltron.eth & @netrim\n- StableLab: @Kene_StableLab" +start: 1717779600 +end: 1718384400 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 91739.67054162115 +scores: + - 77970.25409401013 + - 13240.985315577514 + - 528.431132033523 +votes: 123 +quorum: 75000 +funding: + amount: 5,000 + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-102.yml b/public/GIPs/GIP-102.yml new file mode 100644 index 00000000..3c9f293f --- /dev/null +++ b/public/GIPs/GIP-102.yml @@ -0,0 +1,196 @@ +id: '0x71dc9cfd5e83c7b1a58c8e11436029087e727087a7f5e59b6b93c48d4492e0bd' +gip_number: '102' +url: https://snapshot.org/#/gnosis.eth/proposal/0x71dc9cfd5e83c7b1a58c8e11436029087e727087a7f5e59b6b93c48d4492e0bd +title: Should GnosisDAO provide financing for the new GnosisVC ecosystem venture fund? +body: 'GIP: 102 + + title: Should GnosisDAO provide financing for the new GnosisVC ecosystem venture + fund? + + author: Ben, GnosisVC + + type: Funding + + status: Draft + + created: 2024-06-10 + + duration: 7y + + funding: $20 million + + + Summary + + + GnosisDAO should finance the new GnosisVC fund to promote further ecosystem growth + and product lines in the selected target verticals. + + Abstract + + + GnosisVC fund will raise a total of $40m, wherein GnosisDAO will invest $20m and + the remaining $20m will be raised from external LPs. + + GnosisVC will invest in early-stage projects to accelerate the development, adoption, + and growth of DApps and fintech integrations strengthening the broader Gnosis Ecosystem. + + + GnosisVC fund will deploy into early-stage projects in line with the existing Gnosis + 3.0 thesis with a focus on RWAs, Decentralized Infrastructure, and Financial Payment + Rails as target verticals. + + Fund Structure & Terms + + + The fund will be set up as a Cayman-exempt limited partnership with a term of 7 + years (+ up to 2 years extension) and a 2/20 fee structure (2% management fees and + 20% carry per industry standards). + + + The investment period will last for 3 years, with the expected schedule of the capital + calls being ca. one-third of the total commitment to be paid in per year. + + + Deliverables to LPs will include: + + Quarterly reports on the investment portfolio posted on DAO forum. + + Investment summaries are shared with LPs via a dedicated data room. + + Implementation Initiatives + + + Venture Fund: + + Support and incubate projects through funding, governance participation, and advisory. + + + Gnosis Ecosystem Integration: + + Onboarding and integrating portfolio companies into the larger Gnosis ecosystem + through an introduction to existing Gnosis projects and by facilitating a collaborative + environment. + + + Maintenance: + + Continued review and collaboration with existing partners and ongoing assistance + for portfolio companies from GIP 38. + + + Reporting: + + Quarterly reports and updates on investments and portfolio companies will be shared + with the DAO, as well as their contribution to the evolution of the Gnosis 3.0 thesis. + + Investment Thesis + + + GnosisVC will be deploying capital into projects that will strengthen the existing + Gnosis ecosystem through but not limited to the following three investment verticals: + + Financial Payments + + + Incremental margins are the core of the payment stack. The vertical is very crowded + with a deeply intermediated stack and heavy cross selling. Focussing on payments + middleware around Gnosis Pay, the fund should have considerable experience and informational + advantages to be able to build out an integrated stack from the point of sale onwards. + + Decentralized Infrastructure + + + The future of computing and data availability is open source. In the absence of + a fully mature Zero-Knowledge cryptography stack, the decentralization of services + and applications at scale must proceed hand-in-hand with an equivalent decentralization + of the underlying component infrastructure. The development of such an internet-native + substrate must be tackled from multiple avenues: data availability, composable compute + environments, orchestration and coordination of tasks, tooling, and real-time analytics + to name a few. As a case study, LLMs have captured the public imagination on a circa + 6-year-old technology. While there has been a lot of focus on model quality, model + tooling, hosting, and standalone end-user deployments are an equally important but + frequently underestimated part of the vertical. Historically, some of the most impressive + investments by Gnosis have been infrastructure-related (MatterLabs, Gelato, TheGraph). + As such, we believe that this vertical stays true to the Gnosis DNA. + + RWA + + + The Defi crypto markets are saturated with liquidity and narrative-driven demand + without sufficient credit products to deploy into. This is due to the current need + for full collateralization, so capital is abundant while investment opportunities + are still scarce, there is also huge latent demand for institutional adoption through + stablecoins, yield-bearing instruments, and new liquid RWAs. The continued growth + of self-custodial alternatives to existing CeFi interfaces presents the opportunity + to funnel conventional financial players into the already existing Defi stack. + + + Team + + + Investment Committee + + + Benjamin Senn, + + DAO Legal Consultant + + + Daniele Pinna, + + Quantitative DeFi Researcher 0xSideQuest + + + Colin Rix, + + Multi-Strategy Fund Portfolio Manager + + + Ariunaa Batzorig, + + DAO treasury & Portfolio/Asset Manager + + + Stefan George, + + CTO Gnosis (excluded from management fees and carry) + + + Advisors + + + Sebastian Bürgel, + + VP Technology Gnosis & Founder HOPR + + + Arthur Gervais, + + Assoc. Prof UCL & Founder D23E + + + For further information please contact info@gnosisvc.io + + Or enquire at https://docs.google.com/forms/d/e/1FAIpQLScIVwlz2D8IdaWDQp0t_2U9N_sHMc2XjGtYZICBuNzNutndNg/viewform' +start: 1719334174 +end: 1719938974 +state: closed +author: '0x679974B1a20826c45016906aa4E2499752De9c1e' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 76371.50349640354 +scores: + - 75858.7212688231 + - 11.975968855354395 + - 500.8062587250896 +votes: 96 +quorum: 75000 +funding: + amount: 20 million + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-103.yml b/public/GIPs/GIP-103.yml new file mode 100644 index 00000000..e7316bce --- /dev/null +++ b/public/GIPs/GIP-103.yml @@ -0,0 +1,67 @@ +id: gip-103-should-gnosis-dao-allocate-8k-gno-to-fund-a-usdc-incentives-program +gip_number: 103 +url: https://forum.gnosis.io/t/gip-103-should-gnosis-dao-allocate-8k-gno-to-fund-a-usdc-incentives-program +title: Should Gnosis DAO allocate 8k GNO to fund a USDC incentives program? - Governance + - Gnosis +body: "## Executive Summary\n\nThe USDC token on Gnosis Chain (currently available\ + \ by bridging from Ethereum through the Gnosis Bridge) is not compliant with the\ + \ Bridge Token Standard, established by Circle in November 2023. With the objective\ + \ of growing the USDC bridged into Gnosis, and the ultimate goal of Circle taking\ + \ over the token and converting it to native USDC on Gnosis Chain, we propose to\ + \ create an incentives program of up to 8k GNO.\n\n## Specification\n\nIf this proposal\ + \ is approved, Gnosis DAO will be incentivising the growth of [USDC.e](https://gnosisscan.io/token/0x2a22f9c3b484c3629090feed35f17ff8f88f76f0),\ + \ which is compliant with the standard and that can be acquired by calling Deposit()\ + \ on a [Transmuter](https://gnosisscan.io/address/0x0392a2f5ac47388945d8c84212469f545fae52b2).\ + \ The swap of the old USDC to the new one can also be done through the bridge UI.\ + \ New USDC bridged to Gnosis will automatically be USDC.e thanks to changes in the\ + \ bridge UI.\n\nkarpatkey will define the allocation of the incentives, based on\ + \ what is deemed the most suitable action on Gnosis Chain. Under this same post,\ + \ we will be reporting the updates of the program, detailing how much was spent,\ + \ on which pools/protocols, and which results we have achieved.\n\nThe program will\ + \ run until USDC is natively issued on Gnosis, and we have ensured that it is well\ + \ integrated into DeFi.\n\nThe objective of the proposal, however, is not just bringing\ + \ capital, but also users. Incentives will be directed to guide specific behaviours\ + \ that will make users sticky. Gnosis is building a set of products that are already\ + \ finding Product Market Fit - Gnosis Pay being an example of that. It is the right\ + \ timing to launch an incentives program to bootstrap the ecosystem. In the end,\ + \ the results of the program should be:\n\n 1. Have native USDC\n 2. Have more\ + \ users in Gnosis Chain\n 3. Have more capital on Gnosis Chain, as a result of\ + \ 1 and 2, and regardless of having some capital flying away.\n\n\n\nAs two examples\ + \ of some strategies that could be utilised to incentivise wanted behaviours:\n\n\ + \ * Reward (more) users that deposit USDC in Aave/Spark, borrow EURe and spend\ + \ it with Gnosis Pay.\n * Reward users that make a large TWAP of USDC for GNO,\ + \ by giveing them a certain % on top of what they bought (depending on the size\ + \ and time extension of the TWAP).\n\n\n\n## Rationale\n\nThe adoption of a compliant\ + \ USDC token on Gnosis Chain is crucial for enhancing its DeFi ecosystem, as it\ + \ is a requirement for native USDC and CCTP. Having native USDC will help bring\ + \ Gnosis Chain closer to CeFi, and CCTP will lower the costs of bridging in and\ + \ out. Additionally, native USDC will provide significant advantages for Gnosis\ + \ Pay, allowing its worldwide expansion.\n\n## Budget\n\nThis program aims to direct\ + \ up to 8k GNO in incentives. Assuming that we need to pay a ~10% APY for incentives\ + \ and that we achieve significant size (eg., 50M) in 6 months, this translates to\ + \ roughly ~$2.5M.\n\nThis proposal requests 8k GNO, which accounts for potential\ + \ market volatility. We will continuously work on optimising incentive allocation\ + \ which may result in the desired growth in a shorter time frame and/or with fewer\ + \ incentives paid out. In this case, the surplus budget will remain unallocated.\n\ + \n8 Likes\n" +start: 1718118995 +end: null +state: [] +author: null +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 8k + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-104.yml b/public/GIPs/GIP-104.yml new file mode 100644 index 00000000..319ad729 --- /dev/null +++ b/public/GIPs/GIP-104.yml @@ -0,0 +1,302 @@ +id: '0x61846fd39613dc0858b1df2d52155e01211ba17f6ad7b7f689e4f287124805bd' +gip_number: '104' +url: https://snapshot.org/#/gnosis.eth/proposal/0x61846fd39613dc0858b1df2d52155e01211ba17f6ad7b7f689e4f287124805bd +title: Should the GnosisDAO Enhance Awareness and Adoption of the Shutterized Gnosis + Chain by Providing a Grant for Marketing Activities? +body: 'Link to forum post: https://forum.gnosis.io/t/gip-104-should-the-gnosisdao-enhance-awareness-and-adoption-of-the-shutterized-gnosis-chain-by-providng-a-grant-for-marketing-activities/8700/1 + + + + GIP: 104 + + title: Grant for Marketing Activities: Enhance Awareness and Adoption of Shutterized + Gnosis Chain + + author: brainbot gmbh + + status: Proposed + + type: Funding + + created: 2024-06-17 + + + duration: 6 months + + funding: 40,000 xDAI + 100 GNO + + + + ## Executive Summary + + + brainbot seeks a grant of 40,000 xDAI + 100 GNO from Gnosis DAO to expand our marketing + campaign in support of the launch of Shutterized Gnosis Chain. Our goal is to amplify + awareness of Shutterized Gnosis Chain and its benefits to end users - protection + against malicious MEV and censorship. Our intended impact is to achieve widespread + adoption - increase users and transactions on Shutterized Gnosis Chain. The two + primary foci of these marketing activities will be 1) to hire and direct Wachsman, + a PR agency to promote the launch and all activities around it and 2) to put a heavy + focus on IRL events such as ETHCC, hackathons and various meetups. + + + The activities under this grant will run through Q3 and Q4 2024. + + + ## Specification + + + **Opportunity:** + + + Gnosis Chain, Nethermind and brainbot recently announced the [launch of Shutterized + Chiado testnet](https://blog.shutter.network/the-first-shutterized-testnet-is-now-live-on-chiado/). + We are now working together to launch Shutterized Gnosis Chain in early July 2024. + + + Shutterized Gnosis Chain will be a significant milestone for a Gnosis Chain and + its users. Gnosis Chain will become the first blockchain to implement threshold + encrypted mempools, which protect end users against malicious MEV and censorship + using decentralized technology. + + + **Initiative:** + + + brainbot is spearheading a comprehensive marketing campaign to ensure a successful + launch of Shutterized Gnosis Chain. The campaign aims to: + + + - further promote Gnosis Chain as the leading blockchain implementing crypto’s core + values: decentralization, permissionlessness, accessibility, information symmetry + etc. + + + - highlight Gnosis Chain’s growing DeFi ecosystem + + + - raise awareness that Gnosis Chain is now the “safe blockchain”, where degens can + trade without fear of malicious MEV (such as front running and sandwich attacks) + + - raise awareness that Gnosis Chain is also the “censorship resistant blockchain”, + where users can be assured that their transactions are a) included, b) treated equally + and fairly regardless of their content + + + - increase the satisfaction / NPS of defi traders on Gnosis Chain + + + - increase the percentage of protected transactions on Gnosis Chain + + + - growth in social media engagement and followers (Gnosis Chain and Shutter accounts) + + + - achieve media coverage for the launch of Shutterized Gnosis Chain + + + Stretch goals: + + + - increase the total number of users and total value locked (TVL) on Gnosis Chain + + + - increase the total number of monthly transactions on Gnosis Chain + + + ## Budget + + + ### Total Requested Funding: 40,000 xDAI + 100 GNO + + + The reason to request the GNO portion of the grant is to increase long term alignment + between the projects. + + + ### Budget Breakdown (estimated): + + + + + | **Head of Marketing** | Plan and orchestrate the campaign | $12k | + + | **2 x Protocol Developers (part time)** | Assist dApp builders and hackathon teams + | $16.5k | + + | **Social Media Manager** | Social media engagement | $8k | + + + | **Designer** | Create brand & design assets related to Shutter x Gnosis | $6k + | + + | *PR Agency** | Wachsman agency for Public relations, media coordination, policy + liaison | $11.5k | + + | **KOL Agency** | KOL activation, social media engagement | $6k | + + + | **Events** | Community and core developer engagement | $10k | + + | **Survey** | Incentivise responses for survey regarding satisfaction / NPS | $3.5k + | + + + ## Marketing Activities + + + ### Shutterized Gnosis Chain Events and Proposals (subject to change) + + + **“Defenders of the Crypto Realm” Movement:** + + + Launching a movement to address systematic manipulation across blockchains. Collaboration + and input from Gnosis is sought. + + + **Gnosis Berlin Meetup (Thu, June 20):** + + + - Presentation about Shutterized Gnosis Chain + + + **Press Release (approx 4 weeks before launch of Shutterized Gnosis Chain):** + + + - Joint press release + + + - Organize media engagements (interviews, op-eds, etc.) + + + - Seek media relationships for engagement + + + **ETHCC Activations:** + + + - Conference Bingo + + + - “Sandwich Attack!” - a Popup Piñata Party + + - Rock Paper Scissors Challenge + + + **ETHCC Breakfast Side Event (Wed, July 10th):** + + + - Co-curated agenda + + + - Co-branded event + + + **Hackathons (confirmed)** + + + - ETHGlobal Singapore (Sept 20-22) + + + - ETHSan Francisco (Oct 18-20) + + + - ETHBangkok (Nov 15-17) + + + **Hackathons (prospective)** + + - EthWarsaw (Sept 5-8) + + + - EthRome (Oct 4-6) + + + **Other Events (prospective)** + + - Web3Privacy Summit Rome (Oct 4) + + + **Bounty Ideas:** + + + - Wallet with integrated Shutter encryption functionality (e.g., fork MetaMask) + + + - Web application to encrypt raw transactions + + + - Self-deployable RPC proxy server for transaction encryption + + + - Analytics on Shutter transaction schedules, queue status, costs, etc. + + + - Projects requiring privacy/non-frontrunnability + + + ## Existing Grant + + + Shutter DAO 0x36 has already provided brainbot with a grant for 180,000 USDC and + 60,000 SHU to support this marketing campaign. Additional funding from Gnosis DAO + will significantly enhance the reach and impact of this campaign. + + + ## Team/Organization + + + **brainbot gmbh:** We are a core developer of Shutter and a contributor to Shutter + DAO 0x36. We are seasoned team with extensive experience in blockchain marketing, + supported by external consultants and agencies. + + + ## Conclusion + + + The proposed grant will enable brainbot to execute a robust marketing campaign surrounding + the launch of the Shutterized Gnosis Chain in Q3 and Q4 2024. The marketing campaign + will focus on hiring and directing a PR agency to promote the launch and all activities + around it , and hosting/supporting IRL events including ETHCC, hackathons and meetups. + The marketing campaign will increase awareness of the benefits to end users (e.g. + protection against malicious MEV and censorship) and achieve widespread adoption + (e.g. increase users and transactions on Shutterized Gnosis Chain). The proposed + grant will benefit Gnosis Chain and the Gnosis ecosystem. + + + --- + + + **Voting Options:** + + + - **In favour:** Approve the grant to brainbot gmbh + + + - **Against:** Do not approve the grant + + + + **License:** CC0 1.0' +start: 1719394436 +end: 1719999236 +state: closed +author: '0xD31e0eEC136353bc77b49d1FEE27292A8b5bdc93' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 95408.28506152742 +scores: + - 93950.35503056496 + - 1148.4008925661433 + - 309.5291383963267 +votes: 100 +quorum: 75000 +funding: + amount: 40,000 + currency: xDAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-105.yml b/public/GIPs/GIP-105.yml new file mode 100644 index 00000000..7455910b --- /dev/null +++ b/public/GIPs/GIP-105.yml @@ -0,0 +1,145 @@ +id: '0x54f2e2519c44ed728148dbe3dbef29c5c91d5ab8fdbade1c909b9a6d16bcdec5' +gip_number: '105' +url: https://snapshot.org/#/gnosis.eth/proposal/0x54f2e2519c44ed728148dbe3dbef29c5c91d5ab8fdbade1c909b9a6d16bcdec5 +title: Should GnosisDAO support v2 Gnosischa.in Explorer hosted by beaconcha.in? +body: 'https://forum.gnosis.io/t/gip-105-should-gnosisdao-support-v2-gnosischa-in-explorer-hosted-by-beaconcha-in/8713 + + + + + ``` + + GIP: 105 + + title: Should GnosisDAO support v2 Gnosischa.in Explorer hosted by beaconcha.in? + + author: butta + + status: Proposed + + type: Funding + + created: 2024-06-19 + + duration:1 year + + funding: $300,000 annually + $100,000 one-time integration fee + + ``` + + + ## Category + + + Infrastructure projects + + + ## Executive Summary + + + As some of you have seen on [X](https://x.com/beaconcha_in/status/1801223159334539776), + beaconcha.in has launched a beta for the [v2 explorer](https://v2-beta-holesky.beaconcha.in/). + It introduces several new features, including real-time monitoring of up to 100,000 + validators, the ability to group validators, and options to share custom dashboards. + + + Our next steps are to rework the notification system, introduce an account dashboard + for transactions, new APIs, new mobile App and more. + + + Due to these upcoming changes, we stopped contributing to the v1 explorer codebase + a few months ago. We expect to fully migrate to the v2 explorer sometime next year. + Because of this, we would love to have Gnosischain on our v2 [open source](https://github.com/gobitfly/beaconchain) + explorer. + + + Voting in favor of this proposal will ensure a smooth transition from v1 to v2 for + gnosischain. + + + ## Specification + + + One major criticism from the Gnosis community was the cap of 280 validators in the + dashboard and app. This limit was due to technical constraints, not our unwillingness + to increase it. Additionally, our old pricing did not differentiate between networks. + + + We have listened to your feedback and propose the following for the v2 explorer: + + + - Free users can monitor up to 20 validators, [which matches the average number + for most Gnosis users](https://docs.google.com/presentation/d/1IEPVvOE3T6B-a3NJVt3ws4LXXqc_h-QG-lw8wVoLgH8/edit#slide=id.g27a35603b14_0_1314) + + + - Subscribed users can monitor up to 100,000 validators. + + + - All features mentioned here: https://v2-beta-holesky.beaconcha.in/pricing will + also be available for Gnosis. + + + - Premium plans will offer a significantly higher validator limit for Gnosis compared + to Ethereum, integrated within the existing pricing tiers. + + For example, if Pricing Tier “[Guppy](https://v2-beta-holesky.beaconcha.in/pricing)” + supports 100 Ethereum validators, it will support a higher number of Gnosis validators, + may support up to 500. + + This means users will only need one subscription to increase their limits on Ethereum + and gnosis. + + + The exact number for the Gnosis validator limit will be determined when we start + integrating Gnosis. + + ![|170x508](https://forum.gnosis.io/uploads/default/optimized/2X/9/9a84595530f108da0687aa5c1e95f1e9f7a31291_2_250x750.png) + + + ## Budget + + + $300,000 annually + + 60% in USD/USDC - $180k USDC/USDT + + 40% in GNO - $120k in GNO (2 Year lockup) + + +one-time v2 integration fee $100,000 + + 100% in USDC/USDT + + + Our address `0x9d4E94dB689Bc471E45b0a18B7BdA36FcCeC9c3b` (beaconchain.eth) + + + ## Timeline, Implementations and Deliverable + + + Since [gnosischa.in ](http://gnosischa.in)is already up and running, there are no + milestones necessary for v1. (See [GIP-74](https://forum.gnosis.io/t/gip-74-should-gnosisdao-support-gnosischa-in-explorer-hosted-by-beaconcha-in/6228?u=butta)) + + + Voting in favor of this proposal will ensure a smooth transition from v1 to v2 for + gnosischain and will cover the costs of v1-gnosischa.in for 1 year.' +start: 1719496255 +end: 1720101055 +state: closed +author: '0xD67952D9a8F27003De7C94D4A76191831165C01C' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 79562.13359555315 +scores: + - 78176.66390498745 + - 1238.3172390059644 + - 147.15245155972278 +votes: 103 +quorum: 75000 +funding: + amount: 300,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-106.yml b/public/GIPs/GIP-106.yml new file mode 100644 index 00000000..287def27 --- /dev/null +++ b/public/GIPs/GIP-106.yml @@ -0,0 +1,72 @@ +id: gip-106-should-gnosisdao-reinstate-full-rewards-for-eligible-gnosisvip-validator-nodes +gip_number: 106 +url: https://forum.gnosis.io/t/gip-106-should-gnosisdao-reinstate-full-rewards-for-eligible-gnosisvip-validator-nodes +title: Should GnosisDAO Reinstate Full Rewards for Eligible GnosisVIP Validator Nodes? +body: "#### Category\n\nFunding - Rewards\n\n#### Executive Summary:\n\nThis proposal\ + \ aims to revisit and restore the original reward policy for the GnosisVIP event.\ + \ The event’s initial rules allowed participants to set up validator nodes across\ + \ 104 countries, with the first 10 nodes in each country being eligible for rewards.\ + \ The original rules can be reviewed [here](https://web.archive.org/web/20230922135332/https://www.gnosis.builders/post/introducing-gnosisvip).\n\ + \nGnosisVIP is getting concluded due to the retirement of Builders Team which launched\ + \ this event. However, the team that took over the reward distribution decided to\ + \ cut down the rewards for participants who run more than one validators, citing\ + \ concerns about farming. The announcement can be found [here](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8).\n\ + \nSince there is no restriction in the rules against multiple validator nodes with\ + \ unique IP addresses, and all those eligible validators contribute equally to geo-diversity\ + \ in this event, this proposal seeks to ensure participants receive the full rewards\ + \ as originally promised. This will maintain fairness and trust within the Gnosis\ + \ community.\n\n#### Specification\n\nThe proposed reward program aims to restore\ + \ the original terms of the GnosisVIP event:\n\n * Full Rewards for Eligible Nodes:\ + \ All validator nodes that meet the criteria (first 10 in their respective countries)\ + \ should receive their promised rewards according to their validating duration,\ + \ irrespective of whether they are run by the same entity.\n\n\n\nThis approach\ + \ will help the broader Gnosis ecosystem by maintaining predictability and trust\ + \ within the Gnosis community.\n\n#### Rationale\n\nThe motivation behind this proposal\ + \ is to uphold fairness and trust within the Gnosis community. The original rules\ + \ did not prohibit running multiple nodes from different IP addresses, and participants\ + \ should be rewarded based on those terms. Changing the reward policy retroactively\ + \ undermines trust and can discourage future participation.\n\n#### Budget\n\nAccording\ + \ to the [google sheet](https://docs.google.com/spreadsheets/d/1Ix4Cu2aiNr0XzwILqWSZqY3dcPiwQhMEMSF50QVvDrQ/edit?usp=sharing)\ + \ in the [sunsetting announcement](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8),\ + \ a total of 16 validators from 10 participants are affected by the reduced rewards.\n\ + \nThe expected amount of rewards to make up is as follows:\n\nWithdrawal Address\ + \ | Affected Validators | Duration | Affected Rewards | Notes \n---|---|---|---|---\ + \ \n…6b20 | 1 | 9 Mo | 5.25 GNO | \n…4cd8 | 1 | 12 Mo | 10.5 GNO | \n…bc0c\ + \ | 1 | 12 Mo | 10.5 GNO | \n…02fc | 1 | 12 Mo | 10.5 GNO | \n…9bc1 | 2 | 6\ + \ Mo | 4.8 GNO | \n…20a0 | 3 | 12 Mo | 35.7 GNO | \n…db02 | 1 | 9 Mo | 5.25\ + \ GNO | \n…ab14 | 2 | 12 Mo | 23.8 GNO | \n…4765 | 1 | 6 Mo | 2.25 GNO | \n\ + …a88a | 3 | 6 Mo | 7.65 GNO | *Newly Added \n**Total** | **16** | | **116.2 GNO**\ + \ | \n \nEdit: The google sheet seems updated after initially drafting this post,\ + \ updated the numbers to match that.\n\n#### Conclusion\n\nRestoring the original\ + \ GnosisVIP rewards policy is essential for maintaining fairness and trust within\ + \ the community. By honoring the original rules, we can ensure that all participants\ + \ are treated equitably and avoid reputational risk for the Gnosis ecosystem. This\ + \ proposal seeks the support of the GnosisDAO community to uphold the integrity\ + \ of our events and promote a decentralized and robust network.\n\n2 Likes\n\n[Staworth\ + \ / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/3)\n" +start: 1720191111 +end: null +state: + - phase-1 +author: '@dao + + status: Draft + + typ…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-107.yml b/public/GIPs/GIP-107.yml new file mode 100644 index 00000000..60c93c1c --- /dev/null +++ b/public/GIPs/GIP-107.yml @@ -0,0 +1,44 @@ +id: '0x3408dc58da4a04a54352ff6561948ec48ff1d1683bacdad79851e92c5796ce78' +gip_number: '107' +url: https://snapshot.org/#/gnosis.eth/proposal/0x3408dc58da4a04a54352ff6561948ec48ff1d1683bacdad79851e92c5796ce78 +title: Should the GnosisDAO form, in addition to the Gnosis Asset Holdings I Foundation, + a legal conduit to continue to foster Gnosis´ decentralization goals? +body: "The GnosisDAO (the “DAO”) approved, with the successful passage of GIP-94,\ + \ the establishment of a legal conduit, Gnosis Asset Holdings I Foundation, which\ + \ was set up to onboard Centrifuge Prime (as described in GIP-94) and to also hold\ + \ other illiquid investments, including those made historically by the Gnosis Builders\ + \ as described in GIP-96.\n\nThis proposal intends to seek a vote from the DAO to\ + \ establish another legal conduit, the Gnosis Operations Foundation (the “Foundation”),\ + \ to provide the DAO with an additional mechanism for executing work in a decentralized\ + \ environment.\n\nFor reference: \n\nGIP-94 https://forum.gnosis.io/t/gip-94-should-the-gnosisdao-approve-the-gnosis-assets-holding-i-foundation-for-onboarding-into-centrifuge-prime/8331\n\ + \nGIP-96 https://forum.gnosis.io/t/gip-96-should-the-gnosisdao-allow-the-legal-conduit-being-set-up-to-onboard-centrifuge-prime-to-also-hold-other-investments-including-those-made-by-the-gnosis-builders-prior-to-their-dissolution/8334\n\ + \nPricing and payment\n\nThe pricing for this proposal is structured to streamline\ + \ fees.\n\nThe fee structure is as follows:\n\nFees\t\t\nStructural Setup up to\ + \ 50,000 USDC - To be paid immediately for lawyers and Cayman service providers\ + \ to set up a Cayman foundation company to the benefit of the DAO, any unused budget\ + \ will be returned to the DAO treasury. The structure may require ongoing fees but\ + \ will be assessed on a periodic basis and only after approval from the DAO.\n\n\ + Ongoing per annum governance and corporate expenses estimated at 45,000 USDC\tto\ + \ be paid for provision of registered office, Secretary services, Supervisor, Director,\ + \ MLRO/DMLO services." +start: 1721149815 +end: 1721754615 +state: closed +author: '0x5E34844E32A34a50C599f3A443B4054312896c12' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 96652.48401856198 +scores: + - 96647.45470446914 + - 3.0250914956826676 + - 2.004222597151167 +votes: 103 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-108.yml b/public/GIPs/GIP-108.yml new file mode 100644 index 00000000..17742495 --- /dev/null +++ b/public/GIPs/GIP-108.yml @@ -0,0 +1,190 @@ +id: gip-108-should-gnosisdao-honor-the-original-rewards-for-gnosisvip-before-the-distribution-schedule-was-modified-this-proposal-does-not-reward-additional-nodes-with-the-same-withdrawal-address +gip_number: 108 +url: https://forum.gnosis.io/t/gip-108-should-gnosisdao-honor-the-original-rewards-for-gnosisvip-before-the-distribution-schedule-was-modified-this-proposal-does-not-reward-additional-nodes-with-the-same-withdrawal-address +title: Should GnosisDAO honor the original rewards for GnosisVIP before the distribution + schedule was modified (this proposal does not reward additional nodes with the same + withdrawal address)? +body: '## Category + + + Funding - Rewards + + + ## Executive Summary + + + While GIP-106 aims to reinstate GnosisVIP rewards for nodes with the same withdrawal + address, this proposal is different and **aims to honor the higher rewards as originally + announced**. Due to challenges, the Builders Team delayed the distribution of rewards, + to be after 6 months of validation. The Builders Team also reduced the rewards for + the initial months. The original rewards can be reviewed [here](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip). + The original rewards should be maintained because they were heavily promoted by + Gnosis social media and PR, and induced validators to join in reliance on this announcement. + This would maintain fairness and trust about the Gnosis brand. + + + ## Background + + + A co-founder of Flashbots [advocated for geographical decentralization](https://collective.flashbots.net/t/decentralized-crypto-needs-you-to-be-a-geographical-decentralization-maxi/1385) + (might not have motivated GnosisVIP but explains the importance of the program). + Shortly after, Gnosis Builders (whose funding was approved in GIP-38) allocated + 5 million USD for GnosisVIP, a program aimed at increasing the number and diversity + of validators. There was no term reserving the right to modify the rewards at any + time. **The announcement, referring to 388 mGNO for 6 months, was promoted by Gnosis + social media and PR including on[Cointelegraph](https://cointelegraph.com/news/gnosis-chain-spends-5m-on-validator-incentive-program-for-decentralization).** + + + In the original post, payments were expected within 90 days of each month of validation. + Due to technical or logistical challenges, the Builders Team delayed the distribution + of rewards, to be after 6 months of validation. The Builders Team also reduced the + rewards for the initial months. + + + ## Specification + + + This proposal aims to restore the original rewards for GnosisVIP before the distribution + schedule was modified. [Originally](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip), + the monthly breakdown added up to 388 mGNO (38+48+58+68+78+98). The cumulative reward + for 6 months amounted to 12.125 GNO (388/32). + + + In June 2024, validators for 6 months received 3 GNO, and validators for 9 months + received a total of 7 GNO. **This proposal would disburse the difference with 12.125 + GNO.** This approach would maintain trust and predictability in contractual relations + with the Gnosis brand. + + + According to the [Google Sheet](https://docs.google.com/spreadsheets/d/1Ix4Cu2aiNr0XzwILqWSZqY3dcPiwQhMEMSF50QVvDrQ/edit?usp=sharing) + in the [sunsetting announcement](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/8), + around 29* validators are affected by the reduced rewards. As calculated in the + Budget, this would amount to 139.625 GNO to 29 validators. + + + *Nodes whose rewards were reduced due to having the same withdrawal address are + not included in this GIP for simplicity and for avoidance of a conflict with GIP-106. + These operators can advocate for rewards outside my proposal. + + + ## Rationale + + + Changing the reward amounts retroactively would undermine trust, discourage future + relations with Gnosis entities, and breach the offered contract. + + + ### Honoring the contract: + + + As [LegalVision UK puts it](https://legalvision.co.uk/commercial-contracts/unilateral-contract/), + “In a unilateral contract, **legal relations between the offeror and offeree form + when the offeree begins to try to complete the specified act as part of the contract.** + As a result, if you are the offeror, you will have a binding contract and will not + be able to rescind your offer.” The offer of 388 mGNO was seen by over 4000 on Cointelegraph, + and the bulk of interactions was with Gnosis Builders’ first announcement. It would + be unfair to rescind this offer after operators began getting hardware / setting + up validators. + + + ### Not all validators were given the chance to validate for 12 months for full + rewards: + + + The program was closed without equal opportunity to complete 12 months of validation. + April 19, 2024 [was set](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/7) + as the final deadline of Gnosis VIP. That means all validators would have needed + to join as soon as the announcement came out in 2023 to validate for 12 months. + This is contrary to the [blog post](https://web.archive.org/web/20230507042940/https://www.gnosis.builders/post/introducing-gnosisvip) + allowing nodes to be “starting **after** April 19, 2023” and the announced intention + “to further diversify the network to have validators in at least 100 countries **by + the end of the year** ”. It suggests that nodes had at least until the end of 2023 + to start validating as long as they were within the first 10 in an eligible country. + It implies it would take until late 2024 to give operators a fair opportunity for + performance that the offer called for. **Since the modified reward schedule calling + for 12 months of validation was made practically impossible to perform on time for + nodes not joining quickly but still joining in 2023 as intended by Gnosis Builders, + at least the original 12.125 GNO that were announced for 6 months of validation + should be honored.** + + + Personally, I’ve also been asking for clarity on the reward plans since November + 2023 when my hardware broke, but was never told I needed to find a way to continue + from 6 to 12 months (read my Personal Story below). Neither did I receive the rewards + that were promised month-to-month when I joined on May 6, 2023, that could have + been reinvested in new hardware. + + + ### The DAO had indirectly approved the initial program and now directly holds GnosisVIP + participant funds: + + + **The Builders initiative was approved in GIP-38 and[Builders returned their funds](https://forum.gnosis.io/t/gnosis-builders-2023/7814); + there is a portion of these funds that had been promised to GnosisVIP participants + when announcing GnosisVIP.** Luckily, 139.625 GNO is small compared to the 5 million + USD that Gnosis Builders had allocated to the program. + + + ## Budget + + + My methodology was forking the reward sheet as of July 9, 2024, adding an “Affected + Reward” column calculating the difference between 12.125 GNO and the amount for + those nodes paid for 6 or 9 months. [The total sum of this column is 139.625 GNO](https://1drv.ms/x/c/0f6fd8b64fab0138/EfO34nlrw-pPplD3CodJTawByDiZTWzXD_PvVmpm5dK6KA?e=HB5Fg1). + + + Nodes having already received 14 GNO are not impacted. Nodes whose rewards were + reduced due to having the same withdrawal address are not in the scope of this GIP. + + + The following would need to be distributed: + + + ![GIP-108 Sheet](https://forum.gnosis.io/uploads/default/original/2X/d/d9157b016d02ea851864ae759274a16b958b224c.png) + + + ## Personal Story + + + As I’ve [posted on Discord](https://discord.com/channels/502416149343109121/1124140637428666368/1178659200109387826) + in November 2023, I experienced a hardware failure after 6 months in the program + after joining on May 6, 2023. Although [I advocated](https://forum.gnosis.io/t/sunsetting-gnosis-vip/8054/2) + to harmonize the initial announcement with the reward change to not make something + akin to a “rug” of the initial announcement, I have not received a response. I was + never told that the original program that I relied on would not be honored unless + I repaired my hardware and came back. Anyway, if this proposal passes, I will purchase + new hardware and add a LatAm node again. + + + ## Conclusion + + + By honoring the original rewards, we can ensure that all participants are treated + equitably and avoid reputational risk for the Gnosis ecosystem. + + + [Staworth / jackgale.eth - Delegate Platform](https://forum.gnosis.io/t/staworth-jackgale-eth-delegate-platform/8770/3) + + ' +start: 1720590929 +end: null +state: + - phase-2 +author: null +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-109.yml b/public/GIPs/GIP-109.yml new file mode 100644 index 00000000..5027d1d4 --- /dev/null +++ b/public/GIPs/GIP-109.yml @@ -0,0 +1,38 @@ +id: '0x00a840e823e75f4c722db046312fca39e02f3cc75ccf235ed436bec4328d39dc' +gip_number: '109' +url: https://snapshot.org/#/gnosis.eth/proposal/0x00a840e823e75f4c722db046312fca39e02f3cc75ccf235ed436bec4328d39dc +title: 'Should the GnosisDAO introduce Snapshot moderators to reduce spam? ' +body: "The Gnosis DevOps team is currently performing a review and overhaul of the\ + \ GnosisDAO’s Snapshot space. We would like to add trusted moderators that have\ + \ the ability to remove posts that they deem to be low-quality with the goal of\ + \ reducing spam proposals created in the GnosisDAO’s snapshot space.\n\nFor security\ + \ reasons, the GnosisDAO Snapshot space does not have Admins. In order to introduce\ + \ moderation, the GnosisDAO needs to grant the DevOps team permission to modify\ + \ the Snapshot settings.\n\nAdding trusted moderators was originally proposed in\ + \ GIP-77, which never went to Snapshot for onchain voting.\n\nThis GIP proposes\ + \ to elect the following moderators: Manuel Bondy, Armagan Ercan, and John Szczepaniak\ + \ who are trusted contributors of the GnosisDAO.\n\nhttps://forum.gnosis.io/t/gip-77-should-the-gnosisdao-add-delegation-spam-reduction/6362\n\ + \nModeration guidelines are taken from A Code of Conduct for Open Source Communities,\ + \ a widely recognized code of conduct that empowers groups to facilitate healthy,\ + \ constructive community behavior. \n\nhttps://www.contributor-covenant.org/version/2/1/code_of_conduct/code_of_conduct.md" +start: 1722285323 +end: 1722890123 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 3942.0559244190677 +scores: + - 3933.78661298226 + - 0.004055107606205518 + - 8.265256329200938 +votes: 72 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-11.yml b/public/GIPs/GIP-11.yml new file mode 100644 index 00000000..b20bf65f --- /dev/null +++ b/public/GIPs/GIP-11.yml @@ -0,0 +1,132 @@ +id: QmNMRBnipvRfos9ze1MrKpFAsHqxhNrmxjrXzxJnhFif9b +gip_number: '11' +url: https://snapshot.org/#/gnosis.eth/proposal/QmNMRBnipvRfos9ze1MrKpFAsHqxhNrmxjrXzxJnhFif9b +title: Enable SafeSnap +body: '## Simple Summary + + This is a proposal to update the GnosisDAO''s governance structure in a way that + keeps the benefits of off-chain voting while allowing for trustless and permissionless + on-chain execution, using the recently released [DAO module and SafeSnap plugin](https://blog.gnosis.pm/introducing-safesnap-the-first-in-a-decentralized-governance-tool-suite-for-the-gnosis-safe-ea67eb95c34f). + + + ## Motivation + + The current governance structure is designed to be maximally inclusive: gas-free + voting with delegation. This, however, comes at the cost of some additional trust + in the system. Primarily, GnosisDAO must trust that the GnosisDAO Safe multi-sig + will faithfully execute its will on-chain. + + + In order to make the GnosisDAO more autonomous, we should more meaningfully give + it control over its on-chain execution. + + + ## Specification + + Gnosis Ltd recently developed the [DAO module](https://github.com/gnosis/dao-module) + and [SafeSnap Snapshot Plugin](https://github.com/snapshot-labs/snapshot.js/tree/master/src/plugins/daoModule). + + + In combination with the Gnosis Safe, this tool allows for: + + + * Trustless and permissionless on-chain execution of arbitrary function calls + + * Continued use of our existing Snapshot strategies (ERC20 BalanceOf and Delegated + ERC20 BalanceOf) + + * Cheap/free and low friction participation for Participants. + + + ## Rationale + + As described in the [SafeSnap announcement post](https://blog.gnosis.pm/introducing-safesnap-the-first-in-a-decentralized-governance-tool-suite-for-the-gnosis-safe-ea67eb95c34f), + the path to progressive decentralization can be broken down into three steps. + + + 1. **Multi-sig as a proxy:** Gnosis Safe + Snapshot, in which the multi-sig promises + to act in accordance with the off-chain votes. This is the status quo. + + 2. **Multi-sig as a safeguard:** Gnosis Safe + Snapshot + SafeSnap, in which on-chain + execution of off-chain votes is handled by the SafeSnap module, but there are still + multi-sig owners that can veto malicious actions or act quickly in the case of an + emergency. + + 3. **Look ma, no hands!:** Gnosis Safe + Snapshot + SafeSnap, in which the multi-sig + owners have been removed, and the only way to execute transactions is via the SafeSnap + module. + + + This proposal is to move from (1) to (2) by deploying an instance of the DAO module, + enabling it in the GnosisDAO Gnosis Safe, and updating the GnosisDAO Snapshot space + to include the SafeSnap module. + + + ## Implementation + + The DAO module should have the following parameters set: + + + * **Oracle:** GNO denominated instance of Reality.eth `0x8f1CC53bf34932591177CDA24723486205CA7510` + + * **Reality question timeout:** `48 hours` + + * **Proposal cooldown:** `48 hours` + + * **Proposal expiration:** `7 days` + + * **Minimum bond:** `10 GNO` + + * **Question Template:** [see this document](http://gateway.pinata.cloud/ipfs/QmP5ptVAmAcBLJB5bpZntADLieaWRc2iN2V8UQBRoQDA56) + + * **Arbitrator:** Reality.eth contract, so that it is not possible to call arbitration + + `0x8f1CC53bf34932591177CDA24723486205CA7510` + + + + **Transactions that need to be executed:** + + + On the [`gnosis.eth` ENS name](https://app.ens.domains/name/gnosis.eth): + + * update  `snapshot`  text record to  `ipfs://QmPdrDbYVPCz6ASgYvvYWkdpDmZ7pph7TnT4K3zhq1dfP7` + + * update  `daorequirements`  text record to  `ipfs://QmP5ptVAmAcBLJB5bpZntADLieaWRc2iN2V8UQBRoQDA56` + + * set  `registrant`  and  `controller`  to  `0x0DA0C3e52C977Ed3cBc641fF02DD271c3ED55aFe` + + + On the [deployed DaoModule](0x0eBaC21F7f6A6599B5fa5f57Baaa974ADFEC4613): + + * update  `questionArbitrator`  to  `0x8f1CC53bf34932591177CDA24723486205CA7510` + + * update  `minimumBond`  to  `10 GNO` + + * update  `questionCooldown`  to  `48 hours` + + + On the [GnosisDAO''s safe](http://gnosis-safe.io/app/#/safes/0x0DA0C3e52C977Ed3cBc641fF02DD271c3ED55aFe/transactions): + + * call  `enableModule("0x0eBaC21F7f6A6599B5fa5f57Baaa974ADFEC4613")`' +start: 1624033800 +end: 1624638600 +state: closed +author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 91615.3018922983 +scores: + - 91615.3018922983 + - 0 + - 0 +votes: 112 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-110-redo0.yml b/public/GIPs/GIP-110-redo0.yml new file mode 100644 index 00000000..5b0f606b --- /dev/null +++ b/public/GIPs/GIP-110-redo0.yml @@ -0,0 +1,82 @@ +id: '0xa1330504fe929b3ac98b20298f63359f68542670fbb51009db3f4ec6edfd5920' +gip_number: '110' +url: https://snapshot.org/#/gnosis.eth/proposal/0xa1330504fe929b3ac98b20298f63359f68542670fbb51009db3f4ec6edfd5920 +title: Should the Gnosis DAO create and fund a Gnosis Pay rewards program with 10k + GNO? +body: "## Summary\n\nThis proposal aims to create a cashback program for Gnosis Pay,\ + \ benefiting GNO holders. The program will feature five tiers of cashback rewards,\ + \ ranging from 1% to 4% based on the amount of GNO deposited in Gnosis Pay. An extra\ + \ 1% (1pp) will be awarded to Gnosis Pay OG NFT holders. Rewards will be airdropped\ + \ weekly to users ~7 days after their transactions, calculated based on the minimum\ + \ GNO balance held during the week the payment was made. The rewards, measured in\ + \ the currency of the payment, will be distributed in GNO using the Gnosis Chain\ + \ GNO/USD, EUR/USD or GBP/USD Chainlink (or Chronicle for GBP) price feed at the\ + \ time of distribution of the reward. A maximum of EUR 20,000, USD 22,000, or GBP\ + \ 18,000 will be eligible to accrue rewards per month for every user. \n\n## Rationale\n\ + \nAfter last year's outstanding growth, Gnosis Chain has stagnated, mainly due to\ + \ the substantial incentives offered by alternative L1s and L2s. However, many of\ + \ the users and capital in these other chains are likely to leave once the incentives\ + \ end. Gnosis aims to create sticky users through a suite of products, with Gnosis\ + \ Pay being the first. After months of improvements, Gnosis Pay is now ready for\ + \ mass adoption. This cashback program is strategically designed to bootstrap user\ + \ engagement without significant costs to the DAO. Users participating in the program\ + \ must have GNO in their Gnosis Pay Safe wallet, incurring an opportunity cost by\ + \ not staking their GNO. Thus, since GNO held in a Safe wallet will not be staked,\ + \ the additional cost to the DAO would be minimal compared to the benefits.\n\n\n\ + ## Implementation\n\nUsers who hold GNO in the Gnosis Pay Safe will be eligible\ + \ for cashback rewards on eligible Gnosis Pay Card transactions according to the\ + \ following tiers:\n\n* ≥0.1 GNO: 1%\n* ≥1 GNO: 2%\n* ≥10 GNO: 3%\n* ≥100 GNO: 4%\n\ + \nThe cashback percentage scales continuously within each tier (e.g., holding 5.5\ + \ GNO earns 2.5% cashback). Beyond 100 GNO, the cashback percentage does not increase\ + \ any further. Additionally, Gnosis Pay OG NFT holders who qualify for the airdrop\ + \ (with at least 0.1 GNO deposited) will receive an extra 1% cashback. For instance,\ + \ a user holding 5.5 GNO and the OG NFT would receive 3.5% cashback. This feature\ + \ will add value to future NFT campaigns by Gnosis Pay (e.g., referral programs).\n\ + \nA maximum of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue\ + \ rewards per month for every user. \n\nThe program will be administered and managed\ + \ by Karpatkey, responsible for tracking, determining, and distributing the rewards,\ + \ as well as reporting the results. The reward calculation code will be open source.\ + \ We will also provide an endpoint for those that want to feature the rewards in\ + \ their UIs. \n\nRewards will be distributed weekly, 5-12 days after the user made\ + \ the payment, based on the lowest amount of GNO tokens held in their Gnosis Pay\ + \ Safe during the week the payment was made. It is this amount of GNO held prior\ + \ to the card payment that will be relevant in calculating the cashback. For example,\ + \ having 1 GNO in the Gnosis Pay Safe and making a payment in the same week would\ + \ yield 2% cashback. However, topping up GNO to the Gnosis Pay Safe after a payment\ + \ does not change the cashback applicable to that payment. Eligible “payments” do\ + \ not include ATM withdrawals, which will not count towards card payments for the\ + \ purposes of this program. By participating in the program (transferring GNO to\ + \ the Gnosis Pay Safe), users agree that Gnosis Pay will share transaction details\ + \ related to ATM withdrawals with karpatkey. Transactions similar to this one on\ + \ essence (for example, topping up bank accounts with the card) will also not be\ + \ eligible, and this information will also be shared. However, personal information\ + \ will not be shared. The program will run until the budget runs off, or until the\ + \ DAO votes to terminate it or replace it. Cashback received from payments there\ + \ were refunded will tracked and until the users has a \"positive balance\" of accrued\ + \ rewards, no further payments will be made.\n\nShall this proposal passes, a trial\ + \ period will commence on August 19th, which will run for a week and will not accrue\ + \ any rewards. Then, the actual program will commence on August 26th.\n\nThe GNO\ + \ Cashback Program is sponsored by GnosisDAO, offered and administered by the Gnosis\ + \ DAO Operational Foundation, and operated by karpatkey in accordance with its mandate\ + \ from the Sponsor." +start: 1723190400 +end: 1723795200 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 57182.853752582116 +scores: + - 56806.56216965852 + - 93.8166241630919 + - 282.4749587604969 +votes: 93 +quorum: 75000 +funding: + amount: 20,000 + currency: EUR + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-110.yml b/public/GIPs/GIP-110.yml new file mode 100644 index 00000000..976d71f8 --- /dev/null +++ b/public/GIPs/GIP-110.yml @@ -0,0 +1,112 @@ +id: '0xd82b835664c4e15aaa704990a411628ee83edd95c017be190297b6f72df9e65a' +gip_number: '110' +url: https://snapshot.org/#/gnosis.eth/proposal/0xd82b835664c4e15aaa704990a411628ee83edd95c017be190297b6f72df9e65a +title: '[Redo]Should the Gnosis DAO create and fund a Gnosis Pay rewards program with + 10k GNO?' +body: '# Summary + + This proposal aims to create a cashback program for Gnosis Pay, benefiting GNO holders. + The program will feature five tiers of cashback rewards, ranging from 1% to 4% based + on the amount of GNO deposited in Gnosis Pay. An extra 1% (1pp) will be awarded + to Gnosis Pay OG NFT holders. Rewards will be airdropped weekly to users ~7 days + after their transactions, calculated based on the minimum GNO balance held during + the week the payment was made. The rewards, measured in the currency of the payment, + will be distributed in GNO using the Gnosis Chain GNO/USD, EUR/USD or GBP/USD Chainlink + (or Chronicle for GBP) price feed at the time of distribution of the reward. A maximum + of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue rewards per + month for every user. + + + # Rationale + + After last year''s outstanding growth, Gnosis Chain has stagnated, mainly due to + the substantial incentives offered by alternative L1s and L2s. However, many of + the users and capital in these other chains are likely to leave once the incentives + end. Gnosis aims to create sticky users through a suite of products, with Gnosis + Pay being the first. After months of improvements, Gnosis Pay is now ready for mass + adoption. This cashback program is strategically designed to bootstrap user engagement + without significant costs to the DAO. Users participating in the program must have + GNO in their Gnosis Pay Safe wallet, incurring an opportunity cost by not staking + their GNO. Thus, since GNO held in a Safe wallet will not be staked, the additional + cost to the DAO would be minimal compared to the benefits. + + + # Implementation + + Users who hold GNO in the Gnosis Pay Safe will be eligible for cashback rewards + on eligible Gnosis Pay Card transactions according to the following tiers: + + + ≥0.1 GNO: 1% + + ≥1 GNO: 2% + + ≥10 GNO: 3% + + ≥100 GNO: 4% + + The cashback percentage scales continuously within each tier (e.g., holding 5.5 + GNO earns 2.5% cashback). Beyond 100 GNO, the cashback percentage does not increase + any further. Additionally, Gnosis Pay OG NFT holders who qualify for the airdrop + (with at least 0.1 GNO deposited) will receive an extra 1% cashback. For instance, + a user holding 5.5 GNO and the OG NFT would receive 3.5% cashback. This feature + will add value to future NFT campaigns by Gnosis Pay (e.g., referral programs). + + + A maximum of EUR 20,000, USD 22,000, or GBP 18,000 will be eligible to accrue rewards + per month for every user. + + + The program will be administered and managed by Karpatkey, responsible for tracking, + determining, and distributing the rewards, as well as reporting the results. The + reward calculation code will be open source. We will also provide an endpoint for + those that want to feature the rewards in their UIs. + + + Rewards will be distributed weekly, 5-12 days after the user made the payment, based + on the lowest amount of GNO tokens held in their Gnosis Pay Safe during the week + the payment was made. It is this amount of GNO held prior to the card payment that + will be relevant in calculating the cashback. For example, having 1 GNO in the Gnosis + Pay Safe and making a payment in the same week would yield 2% cashback. However, + topping up GNO to the Gnosis Pay Safe after a payment does not change the cashback + applicable to that payment. Eligible “payments” do not include ATM withdrawals, + which will not count towards card payments for the purposes of this program. By + participating in the program (transferring GNO to the Gnosis Pay Safe), users agree + that Gnosis Pay will share transaction details related to ATM withdrawals with karpatkey. + Transactions similar to this one on essence (for example, topping up bank accounts + with the card) will also not be eligible, and this information will also be shared. + However, personal information will not be shared. The program will run until the + budget runs off, or until the DAO votes to terminate it or replace it. Cashback + received from payments there were refunded will tracked and until the users has + a "positive balance" of accrued rewards, no further payments will be made. + + + Shall this proposal passes, a trial period will commence on August 19th, which will + run for a week and will not accrue any rewards. Then, the actual program will commence + on August 26th. + + + The GNO Cashback Program is sponsored by GnosisDAO, offered and administered by + the Gnosis DAO Operational Foundation, and operated by karpatkey in accordance with + its mandate from the Sponsor.' +start: 1724090400 +end: 1724695200 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 108877.93324315126 +scores: + - 86824.11901751305 + - 1545.5060773582968 + - 20508.308148279895 +votes: 158 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-111.yml b/public/GIPs/GIP-111.yml new file mode 100644 index 00000000..b9916435 --- /dev/null +++ b/public/GIPs/GIP-111.yml @@ -0,0 +1,190 @@ +id: '0x7caff999b7a631b850b31439fe00fc733d1319b37b0ffd3e0a64145030606683' +gip_number: '111' +url: https://snapshot.org/#/gnosis.eth/proposal/0x7caff999b7a631b850b31439fe00fc733d1319b37b0ffd3e0a64145030606683 +title: Should the GnosisDAO fund the Ethereum Protocol Attackathon? +body: 'Summary: + + + Ethereum needs more security researchers to examine the codebase and help find vulnerabilities. + As the ecosystem has grown, this is an excellent opportunity to co-fund an audit + challenge with the Ethereum community. + + + The Ethereum Foundation (EF) invites sponsors to support the reward pool for the + eight-week Ethereum Attackathon. + + + This event aims to enhance the security of the Ethereum protocol by organizing the + largest crowdsourced security audit competition. The goal is to raise over $2 million, + with $500,000 committed from the Ethereum Foundation. + + + The Attackathon will be hosted on Immunefi, which they do at no cost, meaning all + contributions go directly to securing the protocol. + + + This challenge is especially relevant for Gnosis. Gnosis has a similar architecture, + is the only EVM with a beacon chain and uses the same clients. + + + A security bug bounty on the Ethereum core protocol benefits the Gnosis Chain by + identifying shared vulnerabilities, enhancing overall security, and fostering a + stronger developer community. This collaborative approach ensures cost-effective, + high-quality security improvements and maintains trust and interoperability between + the chains. + + + Duration: Eight weeks + + + Funding: 100,000 usd + + + Specification + + + What is an Attackathon? + + An Attackathon is a comprehensive event involving three phases: + + + Before the Attackathon: A comprehensive education program on the protocol’s code + delivered via live technical walkthroughs and Attackathon Academy content. + + + During the Attackathon, Security researchers hunt the code based on specific rules + to qualify for rewards. Only reports that are impactful as specified by the rules + of the Attackathon, will be rewarded. + + + After the Attackathon: Immunefi evaluates and compiles the results in the form of + an official Attackathon report and spotlights top researchers with NFT awards and + a leaderboard. + + + The Attackathon aims to be the largest-ever crowdsourced security audit contest + conducted to augment security for the entirety of the protocol’s code. + + + Rationale + + + The Ethereum Foundation has a permanent bug bounty, although it does not get the + awareness and eyeballs it should get on the code. + + + Running the largest audit contest now will help increase the security of the Ethereum + protocol and upskill security researchers for contests at every hard fork in the + future. + + + Shared Codebase and Vulnerabilities: Vulnerabilities in Ethereum could apply to + the Gnosis Chain due to their shared codebase. + + Security Enhancements: Ethereum’s security improvements directly enhance the Gnosis + Chain’s security boosting trust for Ethereum and Gnosis. + + Ecosystem: A secure Ethereum fosters a confident developer community, benefiting + the Gnosis Chain + + Cost-Effective Security: Aligning with Ethereum’s security efforts provides high-quality + assessments without bearing the total cost. + + Budget + + + We seek to raise at least $2 million, with the EF contributing $500k. So far, a + few projects have signed up to secure Ethereum. + + + Based on feedback, we created a couple of tiers, although a project can be sponsored + with any amount they wish. + + + Unicorn Partners (+75 ETH Commitment (Approx. $250,000) (limited to two projects) + + + 1x Unique NFT with leaderboard rank + + Participation in Attackathon Kick-off Twitter Space as a partner speaker + + Leaderboard Placement on Sponsor page + + Top-tier logo placement on Sponsor and Program Landing Page + + Top-tier logo placement on the Program Education page and program report + + Call out in Press Releases and EF and Immunefi Program Announcement Blogs + + Digital Logo Placement in the results announcement at Devon or a dedicated virtual + event + + 4x Devcon tickets + + 25% Discount on Crowd Sec offerings [transferable] + + 1x Dedicated Twitter post announcing sponsorship from Immunefi Twitter handle + + Panda Partners +30 ETH Commitment (Approx. $100,000) + + + 1x Unique NFT with leaderboard rank + + Leaderboard listing on the sponsor landing page + + Mid-roll logo placement on Sponsor and Program Landing Page + + 2x Devcon tickets + + 10% Discount on Immunefi Crowd Sec offerings [Transferable] + + 1x Dedicated Twitter post announcing sponsorship from Immunefi Twitter handle + + Key dates include: + + + July 8-11: EthCC program announcement + + + August 8: Detailed program announcement and education kickoff. + + 3rd Week of August: Attackathon hunting begins. + + Mid-October: Attackathon concludes, and results compilation begins. + + November 9-17: Results announced at Devcon. + + + Evaluation + + + The reports will be triaged by the Immunefi team and judged by EF and client team + security researchers. + + + Any unused funds will roll over to future audit contests and security research. + + + I look forward to hearing from the Gnosis community on helping secure the Ethereum + protocol.' +start: 1722624203 +end: 1723229003 +state: closed +author: '0xe6B6D216266B4a50f54cc1b266251dd602394B95' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 41150.97509727206 +scores: + - 707.2656131680784 + - 1182.5205036345596 + - 39261.18898046944 +votes: 77 +quorum: 75000 +funding: + amount: 2,000,000 + currency: USD (implied) + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-112.yml b/public/GIPs/GIP-112.yml new file mode 100644 index 00000000..870dd4a7 --- /dev/null +++ b/public/GIPs/GIP-112.yml @@ -0,0 +1,107 @@ +id: '0x509a53db27f35505fbae46855f39a5d2d274527ecf418a8fd7f0da03bc74aa49' +gip_number: '112' +url: https://snapshot.org/#/gnosis.eth/proposal/0x509a53db27f35505fbae46855f39a5d2d274527ecf418a8fd7f0da03bc74aa49 +title: Should the Gnosis Infrastructure team make changes to the GnosisDAO’s Snapshot + configurations? +body: "# Executive Summary\nThe Gnosis Infrastructure team is aiming to improve data\ + \ availability for the GnosisDAO’s subgraphs being consumed by the Snapshot Space.\n\ + \n- As part of the task there is a need for adopting the right indexing solution\ + \ which must provide highly available data for the subgraphs running on Gnosis Chain\ + \ and Ethereum Mainnet which, in turn, are consumed by the Snapshot space.\n- There\ + \ is a need for improving the current Snapshot strategy called GNO voting power,\ + \ which needs to reflect all the available options such as GNO deposits made through\ + \ Safe sponsored calls that allows locked GNO to be used for voting.\n- GIP-101\ + \ passed and requires weighted choice voting for the community to elect 10 delegate\ + \ candidates. However, weighted choice voting is not compatible with the Reality.eth\ + \ module used to power the GnosisDAO’s Snapshot space. The most viable solution\ + \ is to open an official Snapshot sub-space with weighted choice voting enabled.\ + \ In addition to updating the Snapshot subgraphs detailed above, the Gnosis Infrastructure\ + \ team will open a Snapshot sub-space to enable weighted choice voting should this\ + \ proposal pass quorum.\n\n# Introduction\nThe GnosisDAO's Snapshot space needs\ + \ to be monitored and maintained by the Gnosis Infrastructure team. Issues that\ + \ can arise are most often related to The Graph's subgraph indexer for Snapshot.\ + \ The Snapshot Subgraph is a powerful tool that efficiently organizes and indexes\ + \ on-chain governance events sourced from the Snapshot DAO client.\n\nThe recent\ + \ issues with the latest GIPs were related to the subgraphs indexer, which had stopped\ + \ working. The subgraphs are hosted by The Graph and will be deprecated To if they\ + \ are not updated.\n\nCommunity members also surfaced issues related to voting with\ + \ their staked GNO further indicating that there was a subgraph issue.\n\nhttps://forum.gnosis.io/t/bug-in-the-snapshot-voting-power-calculation/8395\n\ + \nGnosis DevOps initiated a review of all Snapshot configurations and found that\ + \ **the GnosisDAO's multisig owners would need to sign off on updating the settings\ + \ for the DAO's Snapshot.**\n\n# Proposed Changes\nThe subgraphs for GNO voting\ + \ power, which are currently running as best effort on Ethereum and Gnosis Chain,\ + \ will necessarily need to be re-deployed on The Graph Decentralized network. As\ + \ a result of the re-deploy process a new value for the SUBGRAPH_URL in the Snapshot\ + \ space configuration will be generated.\n\nThis value must be filled in the Snapshot\ + \ configuration. Any modifications to the GnosisDAO’s Snapshot settings must be\ + \ voted on by the DAO and executed via the DAO’s multi-sig.\n\n# Impact and Benefits\n\ + Updating the Snapshot configurations to install a new Graph API URL will improve\ + \ data availability for the GnosisDAO’s subgraphs being consumed by the Snapshot\ + \ Space. The Infrastructure team will also improve the current Snapshot strategy\ + \ called GNO voting power so that locked GNO from GIP-28 can participate in GnosisDAO\ + \ governance. \n\nhttps://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357\n\ + \n# Implementation Plan\nPlease provide a detailed plan for implementing the proposed\ + \ changes, including timelines, key milestones, and any necessary resources or support.\n\ + \nThe Gnosis Infrastructure team will be working on fixing the most impacting issues\ + \ with the subgraph, among which we have:\n\n1. Migration to the Decentralized Network\n\ + Objective: Transition the existing subgraph from the hosted service to the Decentralized\ + \ Network ahead of the service's deprecation to ensure continued functionality and\ + \ support by migrating to a more sustainable and decentralized service. **This is\ + \ a high priority and time sensitive task that needs to be carried out asap due\ + \ to TheGraph hosted service being deprecated definitely by September 14th 2024.**\n\ + \n2. Refresh of Voting Power Strategy\nObjective: Revise the voting power calculation\ + \ to align with current blockchain usage and protocol engagement. Accurately reflect\ + \ the active protocols and eliminate outdated or less utilized ones, enhancing the\ + \ relevance and fairness of voting power metrics. \n\nAdditionally, voting power\ + \ must account for:\n- Beacon chain withdrawals\n- Have the withdrawal address accruing\ + \ the voting power as opposed to the deposit address\n- osGNO\n- osGNO-GNO Balancer/Aura\ + \ pool\n\nThe Infrastructure team will remove support for:\n\n- 1Hive (Gnosis)\n\ + - Swapper (Gnosis)\n- SushiSwap (Gnosis)\n- Elk (Gnosis)\n- Baoswap (Gnosis)\n-\ + \ Symmetric (Gnosis)\n- Uni v3 (mainnet)\n- Balancer (mainnet)\n\n3. Fixes and Enhancements\ + \ in Voting Power Calculation\nObjective: Correct and refine the calculation issues\ + \ leading to inaccurate voting scores on some indexed protocols in order to keep\ + \ fairness of the voting process. Please see previous DAO votes covering the topic\ + \ of allowing locked GNO to vote on Snapshot for more info.\n\n- Withdrawal event\ + \ of the Gnosis Beacon Chain Deposit smart contract was not handled correctly resulting\ + \ in a wrong tracking of deposited GNO over the network. This issue is considered\ + \ as critical as it could lead to vote power farming. Currently it’s not trivial\ + \ to detect if a withdrawal is for claiming reward or for exit validator without\ + \ tracking the Execution Layer (that is not possible in the subgraph). We decided\ + \ to consider all withdrawals as an exit, even though this means we're not accounting\ + \ for rewards generated over time. While this isn't ideal, it's the best solution\ + \ we have at the moment to prevent abuse.\n\nOur technical team is actively working\ + \ on a better and more accurate solution, and we plan to update the system in the\ + \ coming weeks.\n\n- Fixing the issue with the Deposit event of the Gnosis Beacon\ + \ Chain Deposit smart contract incorrectly handled, which was causing some issues\ + \ with how voting power was being assigned. Specifically, the problem affected services\ + \ like Gelato Network, where the voting power was incorrectly being assigned to\ + \ the service itself rather than to the user.\n\nForum threads:\n- https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902\n\ + - https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357\n\ + - https://forum.gnosis.io/t/bug-in-the-snapshot-voting-power-calculation/8395\n\n\ + All the changes will be handled publicly on the following repository: https://github.com/gnosis/subgraph-voting-power\n\ + \nThe subgraphs will be owned by a Safe on Arbitrum (arb1:0x67cE12b820ea02f045e2507648608442C6527c6C)\ + \ having the Infrastructure team as owners. Subgraphs will be publicly available\ + \ on this page: https://thegraph.com/explorer/profile/0x67cE12b820ea02f045e2507648608442C6527c6C?view=Subgraphs&chain=arbitrum-one\n\ + \nAny updates regarding this GIP will be handled in a dedicated post in the Governance\ + \ section of the Gnosis Forum." +start: 1725276600 +end: 1725881400 +state: closed +author: '0x2408F8a0475D3823A1F4A4bfD86B2a4B80E6eDB6' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 127201.97099401394 +scores: + - 127197.83411998449 + - 0.000109650887329072 + - 4.136764378573427 +votes: 107 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-113.yml b/public/GIPs/GIP-113.yml new file mode 100644 index 00000000..4dc22481 --- /dev/null +++ b/public/GIPs/GIP-113.yml @@ -0,0 +1,129 @@ +id: gip-113-should-gnosis-dao-provide-grants-for-omen-2-0-initiative +gip_number: 113 +url: https://forum.gnosis.io/t/gip-113-should-gnosis-dao-provide-grants-for-omen-2-0-initiative +title: Should Gnosis DAO provide grants for Omen 2.0 initiative? +body: "## 2\\. Funding - Rewards/Reimbursements\n\n#### Category\n\nFunding - Rewards\ + \ and Reimbursement\n\n#### Executive Summary:\n\nThis proposal seeks a grant to\ + \ develop a frontend for the Omen prediction market, that leverages AI agents to\ + \ both create and predict market outcomes. The platform will offer users insights\ + \ into real-world event predictions while enhancing the overall user experience.\ + \ The requested grant of 400K WXDAI and 600 GNO will be used to fund the development\ + \ and maintenance of the Omen frontend.\n\n#### Specification\n\nThe proposed reward\ + \ and reimbursement program includes 400K WXDAI and 600 GNO for the development\ + \ and maintenance of the Omen 2.0 frontend, along with the transfer of the Omen.eth\ + \ ENS for branding and platform management. These funds will be allocated as follows:\ + \ 70% for product development, testing, and maintenance; 15% for marketing; 3% for\ + \ infrastructure; and 12% for project management. This program aims to drive user\ + \ growth on Gnosis Chain, augment the Gnosis AI team and its prediction market agents,\ + \ and support new initiatives and experiments across the broader Gnosis network.\n\ + \n##### Technical Specifications\n\nThe Presagio frontend is being developed on\ + \ React with Next.js, building upon the original OMEN conditional tokens contracts\ + \ written by Gnosis.\n\nKey integrations include Gnosis AI APIs, The Graph and Dune.\ + \ Gnosis AI API is used to fetch real-time market insights. We seek to use Gnosis\ + \ AI API for new functionalities (e.g. market creation, agent insights). Future\ + \ enhancements will involve building a back-end solution to improve data fetching\ + \ efficiency, improving users experience and new functionalities (e.g. database\ + \ to store data for user favorite markets for example).\n\nA comments section is\ + \ also planned, with an integration of a partner-provided solution (preferably in\ + \ web3 space), to allow user discussions within the platform.\n\n#### Rationale\n\ + \nThe past couple of months, there has been a great amount of traction in prediction\ + \ market area with Polymarket raising 70M in investment and there has been considerable\ + \ user growth in Polymarket, limitless.exchange and manifold.markets. At Dappcon,\ + \ there has been plenty of talks and discussions around AI, the kind of risks it\ + \ poses, the challenges it has and how AI and blockchain could become an unstoppable\ + \ force that needs to be kept a close watch. Gnosis has also been ahead of its time\ + \ in terms of all the products they launch and this vision aligns well with the\ + \ Gnosis AI and the investment they have made on AI agents.\n\nDuring Dappcon 2024,\ + \ we showcased the new UI we had started building for prediction markets and asked\ + \ for feedback from Martin. We explored a few possibilities around how we could\ + \ build a frontend for Omen, where we see the predictions that AI makes and the\ + \ research that it does when making a prediction. We will also be able to see how\ + \ each AI agent is performing, comparing them against each other.\n\n#### Budget\n\ + \nAs part of the proposal, we would also be looking forward to receive a grant of\ + \ 400K in WXDAI and 600 GNO (will be used as a validator for 1 year)\n\nThe funding\ + \ will be used for the following:\n\n * Development, testing and maintenance of\ + \ the product - 70%\n * Marketing - 15%\n * Infrastructure costs - 3%\n * Project\ + \ / Product management - 12%\n\n\n\nTransfer omen.eth ENS to a new multisig for\ + \ branding, frontend deployment and management. \nWe would also like to work closely\ + \ with the Gnosis AI team to understand and explore the possibility to make the\ + \ agents get better at creating markets and predicting them.\n\n**Milestones:**\n\ + \n## Milestones: Timeline, Implementations and Deliverable\n\n### Milestone 1 -\ + \ Support Omen 2.0 (Completed)\n\n**Deliverables:**\n\n * Base features: \n \ + \ * The dapp should be able to show all the binary markets and the spread for each\ + \ market.\n * In the markets page, any user should be able to buy and sell the\ + \ outcome tokens with the wallet connected.\n * Searching and filtering of markets.\n\ + \ * There should be a way to see the activity history and a graph depicting the\ + \ fluctuations in the outcome of a market.\n * Show markets that are based on\ + \ different collateral tokens.\n * Redemption of outcome tokens once the market\ + \ is resolved.\n * “My bets” page with a list of all the markets that the user\ + \ has predicted.\n\n\n\n**Time and Price Estimate:** We are completed with this\ + \ milestone and we worked on it for close to 4 months from March to June 2024. We\ + \ estimate 100K for this.\n\n### Milestone 2 - Support for AI agents\n\n**Deliverables:**\n\ + \n * A filter for all the markets created by the AI agents. (Completed)\n * Visualize\ + \ whether a particular transaction is created by one of the AI agents. (Completed)\n\ + \ * Display the resolution status and oracle, based on reality.eth oracle answering\ + \ process (Completed)\n * Connect with Gnosis AI APIs to show relevant articles\ + \ related to the market. (Completed)\n * Profile view (Completed)\n * Wallet Prediction\ + \ metrics (Completed)\n * Support for Devconflict (In Progress)\n\n\n\n**Time and\ + \ Price Estimate:** We estimate this will be done by Oct 2024 and we estimate 100K\ + \ for this.\n\n### Milestone 3 - Support for AI agents, more market types, redesign\n\ + \n**Deliverables:**\n\n * AI research - If the transaction is from an AI agent,\ + \ link the research article, the model used and the confidence rating that had been\ + \ used to arrive at the decision. This is done by integrating with Autonolas mechs\ + \ and Gnosis AI.\n * AI agents overview - Display AI agents performance across\ + \ various markets.\n * AI agents’ leaderboard - most success, most active, category\ + \ based info.\n * Expand to categorical markets.\n * Support for adding liquidity\n\ + \ * Support for market creation.\n * Redesign of the dapp\n * Featured markets\n\ + \ * Work on marketing towards building a brand for Omen in the socials.\n * Work\ + \ on documentation on how markets are created, bet on and resolved.\n\n\n\n**Time\ + \ and Price Estimate:** We estimate this will be done by Mar 2025 and we estimate\ + \ 120K for this.\n\n### Milestone 4 - More use cases\n\n**Deliverables:**\n\n *\ + \ Add support to have a comment section within each market.\n * Show Related markets\n\ + \ * Shareable market iframe\n * Watchlist\n * Add support for limit orders and\ + \ stop loss orders. This will need a lot of activity to wrap the ERC1155 to a ERC20,\ + \ update the liquidity management by the AI agent market creator to add liquidity\ + \ on Swapr V3 and then get help from solvers to tap into these pools for adding\ + \ support.\n\n\n\n**Time and Price Estimate:** We estimate this will be done by\ + \ June 2025 and we estimate 80K for this.\n\nAlso, we would like to be a bit elastic\ + \ in our milestones based on the inputs from users and community.\n\n## Evaluation\n\ + \n**Technical performance:**\n\n * Ensure that the frontend performs seamlessly\ + \ and smoothly without any severe issues.\n * Gnosis AI integration: Evaluate new\ + \ integration possibilities with Gnosis AI APIs for market insights, prediction\ + \ research and accuracy.\n\n\n\n**User engagement and experience:**\n\n * Grow\ + \ the amount of transactions using Omen by at least 500%. We will have a separate\ + \ dune dashboard for overall TVL, transactions and the volume.\n\n\n\n**Milestone\ + \ based progress:**\n\n * Successful shipping of features described in each of\ + \ the milestones.\n\n\n\n**Community involvement:**\n\n * Regular updates to the\ + \ community, GnosisDAO\n * New branding for Omen and reflect the new direction\ + \ and vision\n\n\n\n## Team/ Organization\n\nThe Presagio team comprises Leo, Diogo,\ + \ Rorry, Nicki, Akash, and Venky. As a cohesive unit, we have collaborated for over\ + \ a year to deliver notable projects such as Swapr’s CLAMM ()\ + \ on Gnosis chain and Stackly () deployed on Mainnet, Gnosis\ + \ chain and Arbitrum, all built atop CoW protocol infrastructure.\n\n## Conclusion\n\ + \nPresagio (Omen 2.0) represents a significant step in the evolution of prediction\ + \ markets, blending the AI infrastructure within the Gnosis ecosystem. The requested\ + \ funding will enable the development, maintenance and the growth of the platform\ + \ bringing Omen to a position of leading AI agent driven prediction market space.\n\ + \n6 Likes\n" +start: 1727334351 +end: null +state: + - phase-2 +author: '<Venky (@0xVenky) <venky@swaprhq.io>' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 400,000 + currency: WXDAI + confidence: High + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-114.yml b/public/GIPs/GIP-114.yml new file mode 100644 index 00000000..dee808c9 --- /dev/null +++ b/public/GIPs/GIP-114.yml @@ -0,0 +1,84 @@ +id: '0x0e39baff8db3a93dccdbe404fd006d881dda318c4c2bf4772dbf61552d5d52b8' +gip_number: '114' +url: https://snapshot.org/#/gnosis.eth/proposal/0x0e39baff8db3a93dccdbe404fd006d881dda318c4c2bf4772dbf61552d5d52b8 +title: Should GnosisDAO support an annual renewal for Blockscout SLA and hosting services + - October 2024 - October 2025? +body: "### Executive Summary\nBlockscout continues to be an integral part of the Gnosis\ + \ ecosystem, providing critical blockchain explorer services for both the Gnosis\ + \ mainnet and Chiado testnet. The open-source explorer has not only attracted and\ + \ retained users but has also become an indispensable tool for Gnosis developers.\ + \ We propose to continue our partnership, offering enhanced services and cutting-edge\ + \ features to further elevate the Gnosis user experience.\n\n### Demonstrated Value\n\ + \nOver the previous year (since our last update in [GIP 89](https://forum.gnosis.io/t/gip-89-should-gnosisdao-support-an-annual-renewal-for-blockscout-sla-and-hosting-services/7269)),\ + \ Blockscout has delivered significant value and seen steady usage by the community.\ + \ The high-level numbers included here come from Mixpanel and directly from the\ + \ [Gnosis Blockscout instance](https://gnosis.blockscout.com/) covering stats from\ + \ September 1, 2023 through September 1, 2024 :\n\n Robust User Base:\n * Monthly\ + \ active users increased from 11.2K in September 2023 to 28.4K in August 2024. High\ + \ traffic months included December 2023 with 45,069 MAU and June 2024 with 41,113\ + \ MAU.\n * 115K average monthly page views over the previous year\n\nDeveloper\ + \ Support: \n* 42K verified contracts (all time)\n\nUser Engagement: \n* ~4.2K signups\ + \ to myAccount (since Oct 1, 2023)\n\n### Features and Improvements\n\nOver the\ + \ past year, we've implemented major features through standalone upgrades and significant\ + \ backend (V6+) and frontend improvements (v1.2+) including:\n\n* User Operations\ + \ Support - https://gnosis.blockscout.com/ops\n* Human-readable transactions\n*\ + \ Public tagging and tags submission\n* Name Service support\n* API and CSV export\ + \ improvements\n* SolidityScan security scores\n* DAppscout improvements including\ + \ star rating, DeFi menu and tooling, additional sorting features and more.\n\n\ + ### Roadmap for the upcoming year\n\n* Advanced filtering and sorting options\n\ + * Account Abstraction improvements\n* NFT explorer enhancements\n* Additional DeFi\ + \ integrations\n* Statistics and Analytics improvements (additional views, ability\ + \ to zoom)\n* Multichain search\n* User engagement and retention mechanisms\n\n\ + ### Bridged Transactions\n\nIn addition to the roadmap items above, we will create\ + \ a custom view for xDai bridge transactions providing similar functionality to\ + \ the current Bridged Deposit Transactions view in Gnosisscan (https://gnosisscan.io/txnbridge).\ + \ This view provides insights into xDai origination and allows for better tracking\ + \ and transparency.\n\n### Our Commitment\n\nGnosis is one of the original Blockscout\ + \ instances and will continue to receive priority updates, services and new features\ + \ as they are developed. Blockscout will continue to provide superior service for\ + \ the Gnosis ecosystem.\n\n1. Maintain and host Blockscout instances for Gnosis\ + \ Chain and Chiado testnet.\n2. Provide premium feature updates.\n3. Offer an SLA\ + \ that prioritizes maximum uptime, speed, and db optimizations.\n4. Deliver dedicated\ + \ support via Discord.\n\n### Timeline and Financial Proposition\n\nWe propose a\ + \ renewal of our 12-month engagement backdated to begin on 1 October 2024 and continuing\ + \ through 1 October 2025. Over the past year we have optimized our hosting operations\ + \ and on-premise infrastructure and are pleased to offer a 20% discount on our hosting\ + \ services for 2024-25.\n\n* Gnosis Chain Mainnet and archive node: $6,400/month\ + \ (was $8000 per month) for a total 12 month cost of $76,800\n* Chiado Testnet and\ + \ archive node: $3,200/month (was $4,000/month) for a total 12 month cost of $38,400\n\ + \n**Total Investment:** $115,200\n\n*This represents a $28,800 per year reduction\ + \ from our 2023 pricing, reflecting our commitment to value and support for the\ + \ Gnosis ecosystem.*\n\nAmount is requested up front for the year. Payment can be\ + \ made to Blockscout’s SAFE 0xAddress on Ethereum mainnet (0x242ba6d68FfEb4a098B591B32d370F973FF882B7)\ + \ with USDC or USDT.\n\n### Ongoing Support & Continued Growth\n\nBlockscout has\ + \ a proven track record of providing high-quality, reliable and affordable explorer\ + \ services. We’ve worked hard over the past year to optimize our offerings and close\ + \ the gap between features provided by closed source explorers and our open-source\ + \ explorer. We’ve provided resilience and redundancy over the past year during numerous\ + \ Gnosisscan outages. Above and beyond our parity with other scanners, we are dedicated\ + \ to developing new and innovative features to support Gnosis as a standalone ecosystem\ + \ as well as its role in the multichain future.\n\nBy renewing our partnership,\ + \ you're not just getting a blockchain explorer – you're investing in the continued\ + \ growth and success of the Gnosis ecosystem. Let's continue building the future\ + \ of blockchain exploration together!" +start: 1729610650 +end: 1730215450 +state: closed +author: '0xd145860c3cAD12AeEc9D8021d36B48d7fAd09454' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 79416.20316660054 +scores: + - 79416.17774196692 + - 0.000333137928169376 + - 0.02509149568266771 +votes: 82 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-115.yml b/public/GIPs/GIP-115.yml new file mode 100644 index 00000000..d93917b5 --- /dev/null +++ b/public/GIPs/GIP-115.yml @@ -0,0 +1,124 @@ +id: '0x963a5dceb6f7758cc06ba2ee74d7f17b5da6cce8907b54b39f7df64322e9c373' +gip_number: '115' +url: https://snapshot.org/#/gnosis.eth/proposal/0x963a5dceb6f7758cc06ba2ee74d7f17b5da6cce8907b54b39f7df64322e9c373 +title: Safe{Boost} on Gnosis Chain +body: '## Executive Summary + + Safe{Boost} is a 6-month rewards program to expand Safe activity and users on Gnosis + Chain where users earn points when performing certain activities. A total of 250k + SAFE tokens will be distributed as part of the program, based on the points accrued. + + + **As the Joint Treasury will fund the program, no additional funding is required + for this initiative.** + + + If the proposal receives support from both Gnosis DAO and Safe DAO, karpatkey will + operationalise the program described below on behalf of the JT. + + + ## Rationale + + As the treasury manager for the Safe DAO <> Gnosis DAO joint treasury (JT), karpatkey + is responsible for allocating funds to initiatives to expand the Safe and Gnosis + ecosystems. Within that scope, we propose launching a rewards program on Gnosis + Chain, mirroring the activity included in the current [Safe{Pass}](https://safe.global/pass) + program on Ethereum Mainnet. The goal is to boost Safe user onchain interactions + on the Gnosis Chain and grow the number of SAFE token holders on the Gnosis Chain. + + + This campaign will also serve as valuable experience in assessing the impact of + incentives on the overall Safe activity in Gnosis Chain. Insights gained will help + refine future initiatives, allowing for continuous improvement and increased efficiency + based on real data. + + + Out of the more than [280,000 Safe accounts created in Gnosis Chain](https://dune.com/karpatkey/safe-gno) + since the beginning of 2024 to the end of Q3: + + - Around 10,000 Safes have had at least one week with more than 1 USD in TVL + + - Around 18,000 Safes have made at least one transaction + + - Around 6,000 Safes have transferred at least 1 USD in value + + + ## Specification + + Safe{Boost} is a 6-month rewards program to expand Safe activity and users on Gnosis + Chain. Users who perform the activities listed under the behavior section in Gnosis + Chain (subject to eligibility terms) will earn points. Points will be updated weekly + and made public in a Dune Analytics dashboard. + + + The program will be administered by karpatkey, the manager of the JT, who will be + responsible for tracking, determining, distributing the rewards, and reporting the + results. + + + #### Eligible Activities + + Safe users who conduct the following actions in Gnosis Chain will be rewarded with + points: + + + **Transaction count:** The number of transactions made with your Safe Account. + + **Transaction volume:** Volume of the transactions made with your Safe Account (accounts + with at least 1 USD in volume are eligible for points). + + **Assets stored:** The total value of assets stored in your Safe Account (accounts + with at least 1 USD in TVL are eligible for points). + + **Regular user:** Make at least one weekly transaction with your Safe Account. + + Specific actions related to program partners will also earn additional points. Each + activity related to a program partner will be specific, have separate rewards, and + might also qualify for points. karpatkey will reach out to protocols on the Gnosis + Chain that are relevant to the ecosystem and also present a synergistic opportunity + to onboard them to the program. + + + #### Duration + + The program will last for six months. Pending DAO approval, it is expected to start + on January 10th, 2025, and finish on July 9th, 2025. + + + ## Budget + + Once the program ends, a total of 250k SAFE tokens will be distributed based on + the points accrued throughout the duration. These SAFE rewards will be distributed + by a stream funded from the JT on Gnosis Chain (or a specifically designated Safe + with the JT wallet on Gnosis Chain as an owner) to all eligible Safes, with a stream + duration of 3 months. + + + As the Joint Treasury will fund the program, no additional funding is required for + this initiative. + + + ## Terms of Participation + + Terms of Participation are drafted in this [document](https://drive.google.com/file/d/174HcN4b0mbSYVCIYGgVhiVxyo-a0J6mQ/view?usp=sharing)' +start: 1730827696 +end: 1731432496 +state: active +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: pending +scores_total: 81205.29454144526 +scores: + - 80938.29454144459 + - 0 + - 267.0000000006686 +votes: 60 +quorum: 75000 +funding: + amount: 250,000 + currency: SAFE + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-12.yml b/public/GIPs/GIP-12.yml new file mode 100644 index 00000000..8fbe9021 --- /dev/null +++ b/public/GIPs/GIP-12.yml @@ -0,0 +1,46 @@ +id: gip-12-treasury-swaps-program-1-gno-x-bal +gip_number: 12 +url: https://forum.gnosis.io/t/gip-12-treasury-swaps-program-1-gno-x-bal +title: 'Treasury Swaps Program #1 GNO x BAL' +body: "## Simple Summary\n\nCreate periodic OTC trades GNO X BAL between GnosisDAO\ + \ and Balancer’s treasuries. The program #1 will consist of 4000 ETH-equivalent\ + \ GNO (BAL) distributed across 8 months.\n\n## Motivation\n\nIn April 2021, [Gnosis\ + \ and Balancer launched a partnership integration](https://blog.gnosis.pm/introducing-gnosis-protocol-v2-and-balancer-gnosis-protocol-f693b2938ae4),\ + \ the Balancer-Gnosis-Protocol (BGP). This proposal looks forward to strengthening\ + \ the partnership and aligning the DAOs financially.\n\nHow? \n-Financial incentives\ + \ alignment: It will promote the Balancer-Gnosis-Protocol outcome in the best interest\ + \ of both Gnosis and Balancer\n\n * Treasury diversification\n * Improved token\ + \ distribution within long term players\n * Voting power for DAO proposals\n\n\n\ + \n## Specification\n\nStart a pilot program #1 of 4000 ETH-equivalent GNO (BAL)\ + \ distributed across 8 months. After the program #1, make a lookback, evaluate the\ + \ results and define next steps.\n\nEvery first Monday of the month Gnosis (Balancer)\ + \ sends 500 ETH-equivalent GNO (BAL) to Balancer (Gnosis) treasury wallet.\n\nThe\ + \ price will be defined by the last 30 days of open-price historical data average\ + \ on Coingecko: \nGNO: [https://www.coingecko.com/en/coins/gnosis/historical_data/eth\ + \ ](https://www.coingecko.com/en/coins/gnosis/historical_data/eth) \nBAL: [Balancer\ + \ Price: BAL Live Price Chart & News | CoinGecko](https://www.coingecko.com/en/coins/balancer/historical_data/eth)\n\ + \n[Link to discussion on Balancer forum](https://forum.balancer.fi/t/rfc-treasury-swaps-program-gno-x-bal/2110)\n\ + \n[Link to phase1 post](https://forum.gnosis.io/t/treasury-swaps-program-gno-x-bal/1440)\n\ + \n2 Likes\n" +start: 1630933834 +end: null +state: + - phase-2 +author: '@claberus' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: '4000' + currency: ETH-equivalent + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-13.yml b/public/GIPs/GIP-13.yml new file mode 100644 index 00000000..584aa857 --- /dev/null +++ b/public/GIPs/GIP-13.yml @@ -0,0 +1,120 @@ +id: '0x9b12a093e17e92b56d070ed876883d8c2331678ca3945e44f66dd416cfd47a64' +gip_number: '13' +url: https://snapshot.org/#/gnosis.eth/proposal/0x9b12a093e17e92b56d070ed876883d8c2331678ca3945e44f66dd416cfd47a64 +title: 'Should Gnosis DAO proceed and deploy CowDAO and vCOW token? ' +body: 'The proposal is available [here](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735/1). + It is recommended to read it in the forum where proper formatting is available.  + + + The proposed deployment code for this proposal is available [here](https://github.com/gnosis/cow-token/) + and an audit is available [here](https://github.com/gnosis/cow-token/blob/main/audits/2021-12_G0-group.pdf). + + + # What is CowDAO envisioned to be?  + + + CowDAO is an open organization of developers, traders, market makers and many more + community members aligned with its vision. CowDAO is focused on fair and decentralized + trading systems - in particular, building, maintaining and advancing the Cow Protocol. + Cow Protocol technology powers a network of traders and solvers, enabling trustless + and efficient peer-to-peer trading. Leveraging batch auctions as a key concept uniquely + positions Cow Protocol as native trading infrastructure for discrete-time settlement + layers like Ethereum and enables fair and accessible trading to its users. + + + # Vision + + + We foresee a future where increasingly all kinds of assets will be tokenized on + Ethereum and other decentralized blockchains, where everyone - individuals and collectives + - can have full custody of their tokenized assets. CowDAO''s vision is a decentralized + future where digital assets can be traded in a fair, efficient and reliable manner + among people and communities around the world. Our mission is to build a protocol + that becomes the most user friendly and price effective way to exchange digital + assets, enabling all users to trade securely and know their trades are protected. + + + We are determined to make Cow Protocol the foundational liquidity hub for trading + digital assets by applying continuous innovation, cultivating intellectual bravery + and by expanding the CoW Protocol ecosystem - inviting the brightest minds to join + the community. + + + # Values and Principles + + + This section should not limit the scope of what CowDAO can pursue or achieve. The + community should keep iterating on its values and principles to best reflect each + and every member individually and the DAO as a whole. + + + Below are work in progress principles that we propose should guide the way we behave + as a community and help shape the decision process for CowDAO. + + + # Universal Simplicity + + + The goal of Cowswap is to allow easy access to the decentralized economy across + all levels of experience, the Cowswap community will focus on simplicity and high + quality user experience across DeFi and Web3. + + + # Decentralization and Access to everybody + + + Cow Protocol is permissionless for anyone to access with no discrimination. The + Cowswap community will reward alternative UIs and gateways to the protocol in order + to ensure easy worldwide access and usability in accordance with applicable laws. + + + # Open Collaboration + + + CowSwap should be a core part of Ethereum and Web3, we believe this can be achieved + by openly collaborating with other teams, protocols and communities in the decentralized + ecosystem. Education, information sharing and aligned partnerships are key drivers + to build out the CowSwap ecosystem. + + + # Proposed Governance Parameters for CowDAO Launch  + + + - CowDAO proposals will be discussed on CowDAO''s dedicated Forum, consisting + of two phases: forum discussion and snapshot voting. + + + - Final approval of proposals will be made through vCOW token voting on the cow.eth + snapshot space that will be deployed upon GIP-13 successfully passing. + + + - A maximum amount of 560M vCOW tokens will become available, out of which it  + is estimated that up to 350m vCOW tokens might  be used  for voting initially. A + quorum is proposed that would require roughly 10%  of this supply for approving + CowDAO Improvement Proposals (CIP). This is defined by a set limit of  35m COW tokens + required to vote YES in order for a proposal to pass. + + + - Additionally, in order for a proposal to be approved, YES votes should account + for >50% of total participating votes. (simple majority)' +start: 1643387400 +end: 1643992200 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 138550.10534506236 +scores: + - 138540.8447214393 + - 9.25333281416444 + - 0.007290808895256196 +votes: 545 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-14.yml b/public/GIPs/GIP-14.yml new file mode 100644 index 00000000..07f87257 --- /dev/null +++ b/public/GIPs/GIP-14.yml @@ -0,0 +1,120 @@ +id: gip-14-gnosis-vault-on-hats-finance +gip_number: 14 +url: https://forum.gnosis.io/t/gip-14-gnosis-vault-on-hats-finance +title: Gnosis vault on Hats.finance +body: "## Simple Summary\n\nFollowing the previous forum post, a proposal is to create\ + \ a Gnosis security vault on Hats.finance. Security Vaults on Hats incentivizes\ + \ hackers, auditors, and the community to protect the projects and protocols contracts\ + \ by promoting responsible disclosure.\n\n * A committee composed of Gnosis dev\ + \ leadership & security auditors is assigned as reviewers for security disclosures.\n\ + \n * A Gnosis vault is initialized on Hats.finance protocol, with defined severities,\ + \ covered smart contracts list.\n\n * Community members, Gnosis Treasury, and the\ + \ broad ecosystem are incentivized to deposit GNO into the vault.\n\n * The goal\ + \ of the vault is to incentivize responsible disclosure in the case of a detected\ + \ hack or exploit.\n\n * The dApp is live **app.hats.finance**\n\n\n\n\n## Abstract\n\ + \nHats.finance is a proactive bounty protocol for white hat hackers and auditors,\ + \ where projects, community members, and stakeholders incentivize protocol security\ + \ and responsible disclosure.\n\nHats create scalable vaults using the project’s\ + \ own token. The value of the bounty increases with the success of the token and\ + \ project. In addition, NFT artists will create numerous unique NFTs specially minted\ + \ for hackers and auditors that will responsibly disclose vulnerabilities.\n\nWe\ + \ offer every participant in the Ethereum ecosystem skin in the game to ensure a\ + \ more secure future for the users of #Ethereum and smart contracts in general.\n\ + \n## Motivation\n\nGnosis project:\n\n * 24/7 audit on your protocol with a proactive\ + \ approach that incentivizes the hacker to disclose the vulnerability instead of\ + \ exploiting it.\n\n * A disclosed vulnerability means no TVL/ TOKEN and, most\ + \ of all, no reputation loss.\n\n * PR of disclosure and fix becomes a strength\ + \ to the project and its development team.\n\n * Attract more users to the “strong\ + \ and secure protocol.”\n\n * Permissionless vault - token holders and the gnosis\ + \ community can deposit or withdraw in the same permissionless nature.\n\n\n\n\n\ + GNO value:\n\n * GNO staked in Hats vault increases Gnosis security guarantees\n\ + \n * Staking GNO in the hat vaults reduces circulating token supply\n\n * One-sided\ + \ yield farming based on your GNO\n\n * Participating in Hats pull at this initial\ + \ phase will be rewarded with extra allocation points(Extra token incentive for\ + \ the first 20 projects to join). This way, the gnosis community will have extra\ + \ voting power in what could become a significant security layer of the ecosystem.\n\ + \n\n\n\nGnosis community / GNO holders:\n\n * Join the effort to secure the ecosystem.\n\ + \n * Financial incentive in the form of Yield farming (Protocol protection mining)\n\ + \n * Protect their own project token by sacrificing a portion of their token to\ + \ make their holding more secure. By doing that, get $HAT and become influential\ + \ in the Hats governance process.\n\n\n\n\n## Specification\n\nThe hats protocol\ + \ is permissionless, meaning anyone can participate and lock GNO in the Hats GNO\ + \ vault. The GNO vault protects the Gnosis protocol from hacks by incentivizing\ + \ responsible disclosure through the Hats protocol.\n\nIf a hacker responsibly discloses\ + \ an exploit through the Hats mechanism, a portion (depending on severity) of the\ + \ locked GNO tokens will go to the hacker as a reward, some vested, and some immediately.\n\ + \nThis is a win-win situation for Hackers, the Gnosis community, and the core team.\n\ + \nAs a GNO holder: Statistically when a protocol suffers a hack or exploit its token\ + \ value will drop between 35-50% at the 24 hours following the hack (Messari). It\ + \ is rational to lock part of a user’s holdings to protect the rest of his holdings\ + \ from a potential hack.\n\nHacker gets a substantial amount of _FUNGIBLE_ money,\ + \ become famous for disclosing a critical vulnerability instead of rekt’ing the\ + \ protocol and its stakeholders, and receive funds without becoming a worldwide\ + \ criminal.\n\nWe found out that a crucial element that can help black hat hackers\ + \ to participate in protocol protection is privacy and permissionless.\n\nThe decentralization\ + \ of the protocol is critical in order to incentivize anyone involved in the protocols\ + \ to protect it: community, artist, investors, team members, & developers.\n\n##\ + \ Rationale\n\nSecurity underlies the technology of smart contracts, there isn’t\ + \ such a thing as too much security. We think Ethereum dapps should include both\ + \ our solution and others. The beauty of Hats being a fully permissionless protocol\ + \ is that DAOs, treasuries, and individuals can deposit or withdraw funds from the\ + \ vault at any point. Utilize Idle funds for active protection with full depositor\ + \ control for treasuries and users alike.\n\nThe Hats contracts are [public](https://github.com/hats-finance/hats-contracts)\ + \ verified on Etherscan and can be found by clicking the “View Contracts Covered”\ + \ under Hats vault in app.hats.finance and we are ready to onboard Gnosis GNO.\n\ + \nAudit and safety measures:\n\n[Audit reports](https://github.com/hats-finance/hats-contracts/tree/develop/audit)\n\ + \nHats is live with Hats vault containing $100K USDC worth of token to incentivize\ + \ responsible disclosure.\n\nVault funding: **Not part of this GIP**\n\nThe amount\ + \ of Funding the Gnosis vault on hats, by $GNO holders and Gnosis DAO is 100% controlled\ + \ by you. As a community, you can choose together how important it is for you to\ + \ incentivize others to make Gnosis a much safer environment. Bear in mind that\ + \ funds will be released from the vault only due to vulnerability disclosure. The\ + \ upside from fixing issues is drastically more valuable than the financial face\ + \ value of the GNO tokens that are going to be deposited.\n\n## Implementation\n\ + \n * The hats team will create the committee set up JSON file with all the open-source\ + \ details we collected online.\n * Gnosis team for confirmation.\n * When this\ + \ stage is completed, the vault will be displayed in hats dApp.\n\n\n\n## Gnosis\ + \ Impact\n\n_Phase 2 Proposals: Please ignore this section, and leave as is. It\ + \ is used for Phase 3 proposals. \nPhase 3 Proposals: Replace the `question` in\ + \ the below iframe with the relevant `questionID` for this GIP, then delete this\ + \ paragraph. If Omen Prediction Markets have not been created for this GIP yet,\ + \ or if you have any questions about retrieving the questionID, please get in touch\ + \ with a forum moderator._\n\n## GnosisDAO Snapshot\n\n_Phase 2 Proposals: Please\ + \ ignore this section, and leave as is. It is used for Phase 3 proposals. \nPhase\ + \ 3 Proposals: Add a link to the corresponding GnosisDAO Snapshot poll you’ve created._\n\ + \n6 Likes\n" +start: 1632445026 +end: null +state: + - phase-2 +author: 'Ofir Perez <sombrero@hats.finance> + + status: Phase 2 + + type: Meta + + created: 2021-9-23 + + + + + Simple Summary + + Following the previous for…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-15.yml b/public/GIPs/GIP-15.yml new file mode 100644 index 00000000..1aa66d25 --- /dev/null +++ b/public/GIPs/GIP-15.yml @@ -0,0 +1,81 @@ +id: '0x38b7f446554911d6e0dc261b4ad4bca2ea41b83be47b1c97ce274df811ce14cd' +gip_number: '15' +url: https://snapshot.org/#/gnosis.eth/proposal/0x38b7f446554911d6e0dc261b4ad4bca2ea41b83be47b1c97ce274df811ce14cd +title: Governauts Rewards Systems Research Initiative +body: "```\nGIP: 15\ntitle: Governauts Rewards Systems Research Initiative\nauthor:\ + \ Angela Kreitenweis (angela@tokenengineering.net) (@akrtws (TE Academy)#4246)\n\ + status: Phase 3\ntype: Funding\ncreated: 2021-9-26\n\n```\n\nSimple Summary\n--------------\n\ + \nThe Reward Systems Token Engineering Initiative will run an #OpenScience program\ + \ on the topic of DAO Rewards Systems. We'll offer education and collaborative research\ + \ for Token Engineers specializing in Governance, the aim is to come up with Zodiac\ + \ DAO Improvement proposals.\n\nAbstract\n--------\n\nIn November 2021, we'll kick-off\ + \ a community research initiative on Rewards Systems and bring together 20-30 researchers\ + \ from various backgrounds to work on Rewards Systems for DAOs. The work will be\ + \ based on real DAO cases. We'll offer an extensive educational program and facilitate\ + \ the research process to create maximum output.\\\nThis is an excellent opportunity\ + \ for Gnosis Zodiac to create attention, and work collectively on Zodiac DAO Improvement\ + \ Proposals.\n\nMotivation\n----------\n\nRewards Systems are a vital element for\ + \ DAOs to compensate builders for contributions and grant decision-making power\ + \ and co-ownership to those who are so critical for a DAO's value. Ecosystem Development\ + \ via proposals and grants has become a popular method to distribute funds, and\ + \ establish a shared perspective on value-add. All Rewards Systems need reliable\ + \ value assignment, to ultimately lead to a healthy reward distribution.\n\nThe\ + \ Governauts Rewards System Research initiative will explore:\n\n- How to best\ + \ track contributions and account for the richness of value adds that come in many\ + \ forms: code, communication, care, creativity\n- how to assign value, how to\ + \ define value and associated roles, and permissions\n- what do stakeholders expect\ + \ from rewards, and does the system in place meet these requirements\n- what are\ + \ metrics to measure the reward system healthiness - in its respective lifecycle\n\ + \nSpecification\n-------------\n\nWe'll provide education:\n\n- case introductions:\n\ + - DAO cases with a Rewards System in production (TE Commons, Ocean DAO, NearDAO\ + \ etc.)\n- partner talks, incl. Zodiac\n- Token Engineering fundamentals\n-\ + \ DAO case studies and insights from Gitcoin, CommonsStack, BlockScience, TE Commons,\ + \ and more\n- multidisciplinary insights from game design, behavioral economics,\ + \ currency design, and monetary theory\n\nand mentoring:\n\n- define an own research\ + \ question in the scope of Rewards Systems\n- use methods from the Token Engineering\ + \ toolkit\n- form multidisciplinary teams\n- produce actual outcome\n\nThis\ + \ program is open to anyone, and free.\\\nWe'll have an application process to ensure\ + \ that participants\n\n- have the right background, e.g., Political Science, Behavioral\ + \ Economics, Mechanism Design or Data Analytics\n- commit the next three months\ + \ to work on Rewards System Research questions\n- attend an education program,\ + \ learn and work on a self-defined research question\n\nRationale\n---------\n\n\ + This program is organized by TE Academy. The mission of TE Academy is to develop\ + \ the Token Engineering discipline and grow the number of skilled Token Engineers\ + \ in crypto. TE Academy has run research initiatives like this several times already:\n\ + \n- [Gitcoin Grants Quadratic Funding 2](https://gitcoin.co/blog/token-engineering-open-science-program-a-multidisciplinary-study-of-gitcoin-grants/)\n\ + - [Balancer Simulations](https://youtu.be/q0dmFNPDBuw)\n- [OMNIPool Engineering\ + \ and Simulations](https://youtube.com/playlist?list=PL-GxJch-YeZfjcwjCwwNSRGjnSBdapOtA)\n\ + - About [TE Academy Research Groups 1](https://youtu.be/_qNnVgIAmro)\n\nIncubating\ + \ Governauts is an initiative to establish a dedicated branch in Token Engineering\ + \ focused on decentralization and governance.\\\nWe organize workshops and discussions,\ + \ provide a platform for collaboration and bring research programs to life with\ + \ TE Academy.\n\nImplementation\n--------------\n\nWe'll deliver in three steps:\n\ + \n- Zodiac workshop:\\\n with researchers, partners and DAO stakeholders as\ + \ a roundtable to create awareness and set the scope for Zodiac DAO Improvement\ + \ Proposals\n- Research documentation:\\\n community researchers work on Rewards\ + \ Systems and\n - document their results in public HackMDs/Github repos and\n\ + \ - discuss progress in weekly sessions (all sessions are recorded and shared\ + \ publicly!)\n - share their results in a final presentations event (public)\n\ + - Handover to Zodiac bounty/grant program\\\n to further develop most interesting\ + \ results in DAO Improvement proposals\n" +start: 1636650000 +end: 1637168400 +state: closed +author: '0x3b067Af83F540cB827825a6Ee5480441a4237E77' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 65641.1028885959 +scores: + - 65640.89288859589 + - 0.21 + - 0 +votes: 186 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-16.yml b/public/GIPs/GIP-16.yml new file mode 100644 index 00000000..74e483b4 --- /dev/null +++ b/public/GIPs/GIP-16.yml @@ -0,0 +1,42 @@ +id: '0x8f8d2118ef3a8fa9f8b1814ce2ae34ae8776548716a45ce69082f3e266465f48' +gip_number: '16' +url: https://snapshot.org/#/gnosis.eth/proposal/0x8f8d2118ef3a8fa9f8b1814ce2ae34ae8776548716a45ce69082f3e266465f48 +title: GIP-16 Gnosis Chain +body: 'Should GnosisDAO implement GIP-16, as detailed in this [forum post]() (also + available on [IPFS](https://gateway.pinata.cloud/ipfs/Qmd83zavdSrUDNZEsSdixt7aRoBeEo6pVHSwZhMmyKygjX))? + + + There are four transactions attached to this proposal: + + 1. Withdraw 285,398 GNO from the vesting contract + + 2. Wrap 20,000 ETH to WETH + + 3. Approve 20,000 WETH to the Gnosis Auction contract + + 4. Initiate an Auction on Gnosis Auction + + + Please see the [transaction simulation](https://dashboard.tenderly.co/giacomolicari/xdaignomergetest/simulator/4ba7a377-c418-44a6-a70c-9ce7d984c765) + for the expected result.' +start: 1638291600 +end: 1638896400 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 98984.43493373533 +scores: + - 96601.99358039466 + - 2382.441353340679 + - 0 +votes: 264 +quorum: 0 +funding: + amount: 285,398 + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-17.yml b/public/GIPs/GIP-17.yml new file mode 100644 index 00000000..38e404e0 --- /dev/null +++ b/public/GIPs/GIP-17.yml @@ -0,0 +1,29 @@ +id: '0x06feee3d2c9bc68ae0fccc8f2ada05c8323f0a71d2bcdfbc5556e8336cf5d71f' +gip_number: '17' +url: https://snapshot.org/#/gnosis.eth/proposal/0x06feee3d2c9bc68ae0fccc8f2ada05c8323f0a71d2bcdfbc5556e8336cf5d71f +title: GIP-17 Gnosis DAO Safe update AND new treasury management Safe +body: "Should Gnosis DAO upgrade the Gnosis DAO Safe AND create a separate Safe for\ + \ Active Treasury Management as detailed in [this forum post](https://forum.gnosis.io/t/gip-17-should-gnosis-dao-upgrade-the-gnosis-dao-safe-and-create-a-separate-safe-for-active-treasury-management/2237)?\ + \ \n\nTransaction batch 1 upgrades the Gnosis DAO Safe and creates the new daughter\ + \ Safe.\nTransaction batch 2 sends the tokens to the daughter Safe." +start: 1639515600 +end: 1640124000 +state: closed +author: '0xf19d3e30392359440597ffE1d783ab77aebb2b4D' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 119028.46543965576 +scores: + - 119028.46543965576 + - 0 + - 0 +votes: 140 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-18.yml b/public/GIPs/GIP-18.yml new file mode 100644 index 00000000..faafa9b1 --- /dev/null +++ b/public/GIPs/GIP-18.yml @@ -0,0 +1,38 @@ +id: '0x23d8ac4c853b6b9d9e7972ae64fb94637f141a9e11bdafb0f24c528f43dea27b' +gip_number: '18' +url: https://snapshot.org/#/gnosis.eth/proposal/0x23d8ac4c853b6b9d9e7972ae64fb94637f141a9e11bdafb0f24c528f43dea27b +title: TickDAO Investment +body: 'Should GnosisDAO implement GIP-18, investing 120.7085 WETH in exchange for + 12,500,000 TICK, as detailed in this forum post? + + + https://forum.gnosis.io/t/gip-18-should-gnosisdao-invest-at-tickdao/2262/6 + + + There are one transaction attached to this proposal: + + + Transfer 120.7085 WETH to tickdao.eth + + ' +start: 1640358000 +end: 1640962800 +state: closed +author: '0xef364e390fF3f326e3153d0B9c4B944dB42155e5' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 85151.52459133675 +scores: + - 85134.96447914814 + - 16.56011218860319 + - 0 +votes: 180 +quorum: 0 +funding: + amount: '120.7085' + currency: WETH + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-19.yml b/public/GIPs/GIP-19.yml new file mode 100644 index 00000000..32b3d697 --- /dev/null +++ b/public/GIPs/GIP-19.yml @@ -0,0 +1,29 @@ +id: '0x34c8c299df663957c4ccde826cf56cc798c2590f62ec2e400d635ffae506d901' +gip_number: '19' +url: https://snapshot.org/#/gnosis.eth/proposal/0x34c8c299df663957c4ccde826cf56cc798c2590f62ec2e400d635ffae506d901 +title: Should Gnosis DAO burn 715k GNO? +body: 'Should GnosisDAO burn 715k GNO as detailed in this forum post? + + + https://forum.gnosis.io/t/gip-19-should-gnosis-dao-burn-715k-gno/2312' +start: 1644944400 +end: 1645549200 +state: closed +author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 687.7040123613141 +scores: + - 674.2140123613141 + - 13.49 + - 0 +votes: 70 +quorum: 0 +funding: + amount: 715,000 + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-2.yml b/public/GIPs/GIP-2.yml new file mode 100644 index 00000000..e6c339c8 --- /dev/null +++ b/public/GIPs/GIP-2.yml @@ -0,0 +1,127 @@ +id: gip-2-safe-token-model +gip_number: 2 +url: https://forum.gnosis.io/t/gip-2-safe-token-model +title: SAFE Token Model +body: "## Motivation\n\nThough we are building Gnosis Safe as an open system that\ + \ can be re-used and extended by anyone, we recognize that Gnosis still holds a\ + \ dominant position in the Safe ecosystem. The main reason for this is that Gnosis\ + \ currently holds the “trust monopoly” for the curation and promotion of all core\ + \ components of Gnosis Safe. Here are a few examples:\n\n * **Interfaces:** Gnosis\ + \ hosts the interfaces most commonly used to interact with Gnosis Safes.\n * **Smart\ + \ contracts:** Gnosis is the main contributor and publisher of smart contract updates.\n\ + \ * **Safe Apps:** Gnosis curates the list of Safe Apps displayed to the users\ + \ through our interfaces.\n\n\n\n## SAFE Token\n\nIn order to enshrine Gnosis Safe\ + \ as an end-to-end community project, we are proposing to launch the SAFE governance\ + \ token. We consider the SAFE Token as an essential tool to decentralize the trust\ + \ monopoly held by Gnosis. We believe this will firmly establish Gnosis Safe as\ + \ a public good and community-owned infrastructure. SAFE Tokens are not an investment\ + \ product. Instead, SAFE Token will be distributed to stakeholders of the Gnosis\ + \ Safe ecosystem that are interested in shaping the future of Gnosis Safe.\n\n[![Screenshot\ + \ 2020-11-20 at 10.25.36](https://forum.gnosis.io/uploads/default/optimized/1X/f0342808e1849f58ef03c13aca61fd8b008638eb_2_690x385.png)Screenshot\ + \ 2020-11-20 at 10.25.361118×624 409 KB](https://forum.gnosis.io/uploads/default/original/1X/f0342808e1849f58ef03c13aca61fd8b008638eb.png\ + \ \"Screenshot 2020-11-20 at 10.25.36\")\n\n## SAFE Governance\n\nWe envision the\ + \ SAFE Token will be used to govern and curate essential infrastructure components\ + \ of the Gnosis Safe ecosystem, including:\n\n* * *\n\n#### Assets\n\n * **SAFE\ + \ Treasury:** SAFE holders will be able to reward important ecosystem developments\ + \ via the SAFE Treasury.\n * **ENS domain “safe.eth”:** The ENS domain “safe.eth”\ + \ will be used in the future to point to a Safe Multisig interface deployed on IPFS,\ + \ but it might be used for other purposes as well.\n\n\n\n#### Curation\n\n * **Safe\ + \ Apps:** SAFE Token holders will curate the list of trusted Safe Apps that appear\ + \ by default in the Gnosis Safe web interface and update existing ones to newer\ + \ versions.\n * **Safe Contracts:** After successful audits and bug bounty periods,\ + \ the community should be vetting updates to the Safe Contracts and define which\ + \ is the recommended contract version at any point in time.\n * **Safe Modules:**\ + \ Gnosis Safe smart contracts can be extended with modules to enable custom access/control\ + \ schemes. SAFE holders will be able to curate and validate community-built Safe\ + \ Modules.\n\n\n\n#### Signaling\n\n * **Safe Apps:** Show interest in a specific\ + \ Safe App idea to educate developers about user preference and demand.\n\n * **Infrastructure:**\ + \ Help prioritize tasks in Safe-related Github repositories ([see example](https://tokenlog.xyz/gnosis/safe-react)).\n\ + \n\n\n\n* * *\n\nThere is no immediate need to have all activities described above\ + \ to be community-governed from day one. Rather, Gnosis will take a cautious and\ + \ progressive approach, decentralizing governance over different components successively\ + \ over time to prevent any disruptions to users. The governance process would likely\ + \ be conducted using a SAFE Treasury app that allows SAFE holders to vote on proposals.\ + \ **The transition to open governance is a long term goal, and we aim to establish\ + \ a sustainable governance system that lasts for decades.**\n\nGnosis Safe will\ + \ always remain a fully self-custodial asset management solution, in which the user\ + \ is in full control. The governance enabled through the SAFE Token is limited to\ + \ curation activities and building initiatives that drive the Gnosis Safe ecosystem\ + \ forward.\n\n## SAFE Token Distribution\n\n> Though the proposal is about whether\ + \ a Gnosis SAFE token should be investigated, in the following we outline specification\ + \ ideas as to how such tokens could be distributed, assuming the proposal to issue\ + \ Gnosis SAFE tokens finds your support and will end up being implemented.\n\nWhen\ + \ designing the SAFE Token distribution model, we followed this principle:\n\n*\ + \ * *\n\n**Distribute the SAFE Token fairly and sustainably across a wide range\ + \ of relevant stakeholders to foster active governance of the Gnosis Safe ecosystem.**\n\ + \n* * *\n\nAt genesis, 1 billion SAFE Tokens are proposed to be minted with the\ + \ following distribution:\n\n * **10% Early Adopters (Users)**\n * Early adopters\ + \ are retrospectively awarded for funds stored and transactions made in the past\ + \ according to a predetermined formula. Additionally, there will be an initial “liquidity\ + \ mining” launch program for users.\n * **2.5% Early Ecosystem Contributors**\n\ + \ * Early contributors are retrospectively awarded for ecosystem contributions\ + \ according to a list of contributions consolidated by Gnosis.\n * **25% GnosisDAO**\n\ + \ * To be decided (see options in “Benefits for GnosisDAO Holders” section)\n\ + \ * **50% SAFE Treasury**\n * SAFE Treasury is a vehicle for rewarding future\ + \ ecosystem contributions initially controlled by Gnosis, but over time, it will\ + \ be governed by SAFE Holders. The SAFE Treasury would have a 10 years vesting period.\ + \ It might also be an option to introduce a yearly inflation rate of 1-3%, which\ + \ would be granted to the SAFE Treasury to sustain its ability to reward contributions\ + \ beyond the vesting period.\n * **12.5% Gnosis Share**\n * Gnosis Share is\ + \ incentivising Gnosis and its staff as core maintainers to have aligned incentives\ + \ and long term commitment to the SAFE Token and the Safe ecosystem. Gnosis Share\ + \ would have a 5 years vesting period.\n\n\n\n[![image](https://forum.gnosis.io/uploads/default/optimized/1X/21a6da3cd57feede46970646e10c5305ffd8284d_2_690x379.jpeg)image1550×852\ + \ 181 KB](https://forum.gnosis.io/uploads/default/original/1X/21a6da3cd57feede46970646e10c5305ffd8284d.jpeg\ + \ \"image\")\n\n## Relationship between SAFE Tokens and GNO Tokens\n\nTo recognise\ + \ the importance of GNO Tokens in the development of Gnosis Safe, we propose that\ + \ 25% of the total SAFE Token supply shall accrue to GNO Tokens. This can be achieved\ + \ through various ways, including a combination of:\n\n 1. **Direct vesting to\ + \ GnosisDAO:** SAFE Tokens are vested into the GnosisDAO Treasury over a period\ + \ of time via a vesting smart contract.\n 2. **Uniswap Pool Liquidity Shares:**\ + \ SAFE Tokens are locked in a Uniswap liquidity pool and are matched by GnosisDAO\ + \ with GNO Tokens. The resulting liquidity shares are then split between GnosisDAO\ + \ and the SAFE Treasury to assure mutual incentive alignment.\n 3. **Bonding curve:**\ + \ A bonding curve is set up, issuing SAFE Tokens for GNO Tokens at an increasing\ + \ exchange rate. If demand for SAFE Tokens increases, this results in an increased\ + \ demand for GNO Tokens.\n 4. **Initial price finding and aligning interest:**\ + \ To find a fair initial price, we propose to conduct an initial price finding for\ + \ GnosisDAO’s SAFE Token share on [Mesa](https://mesa.eth.link/). The GNO Tokens\ + \ received through this are given to the SAFE Treasury to ensure their aligned interest\ + \ with GnosisDAO.\n\n\n\n## Which options do you approve?\n\n * Direct Vesting\n\ + \ * Uniswap LP Shares\n * Bonding Curve\n * Initial Price Finding\n\n\n\n0 voters\n\ + \n> ## Disclaimer\n> \n> The plans outlined in this proposal are subject to discussion\ + \ and change. They may also need to be (re)structured to take account of legal,\ + \ regulatory, or technical developments as well as governance considerations. This\ + \ document should not be taken as the basis for making investment decisions, nor\ + \ be construed as a recommendation to engage in any transactions. You are solely\ + \ responsible for your own investment decisions and transactions.\n\n3 Likes\n\n\ + [GIP 16 - Gnosis Chain - xDAI/Gnosis merge](http://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904/8)\n\ + \n[Discrepancy between SAFE token polls - what does it reveal?](http://forum.gnosis.io/t/discrepancy-between-safe-token-polls-what-does-it-reveal/844)\n\ + \n[Tokens for Gnosis Auction and Cowswap](http://forum.gnosis.io/t/tokens-for-gnosis-auction-and-cowswap/1314/2)\n\ + \n[GNO Utility and Value Proposition](http://forum.gnosis.io/t/gno-utility-and-value-proposition/2344)\n\ + \n[How do we fix the GNO distribution problem?](http://forum.gnosis.io/t/how-do-we-fix-the-gno-distribution-problem/821/16)\n\ + \n[GnosisDAO Manifest](http://forum.gnosis.io/t/gnosisdao-manifest/866)\n\n[GIP-1:\ + \ One-time 5% GNO merkledrop to active GnosisDAO participants](https://forum.gnosis.io/t/gip-1-one-time-5-gno-merkledrop-to-active-gnosisdao-participants/690/8)\n\ + \n**[next page →](/t/gip-2-safe-token-model/691?page=2)**\n" +start: 1604481878 +end: null +state: + - pending + - phase-2 +author: Anna George +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-20.yml b/public/GIPs/GIP-20.yml new file mode 100644 index 00000000..9ddf7d33 --- /dev/null +++ b/public/GIPs/GIP-20.yml @@ -0,0 +1,31 @@ +id: '0x86cb89a974a075451f8bfae1892d08136fae8c4321ada07025ff8b2b5edddadc' +gip_number: '20' +url: https://snapshot.org/#/gnosis.eth/proposal/0x86cb89a974a075451f8bfae1892d08136fae8c4321ada07025ff8b2b5edddadc +title: Karpatkey DAO Treasury Management +body: "Should GnosisDAO implement GIP-20, as detailed in the following forum post?:\ + \ https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233\n\nTransactions\ + \ included in this proposal:\n - Set the Active Treasury Managemet wallet (Daughter\ + \ Safe) threshold to 3 signers. This Safe was created in GIP-17.\n- Add 2 Karpatkey's\ + \ signers to Daughter Safe.\n- Add GnosisDAO's trusted signers to Daughter Safe.\n\ + - Send 326797 RAI investment to Karpatkey DAO." +start: 1641481200 +end: 1642086000 +state: closed +author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 146970.63419005522 +scores: + - 146924.34160450587 + - 46.29258554934886 + - 0 +votes: 188 +quorum: 0 +funding: + amount: '326797' + currency: RAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-21.yml b/public/GIPs/GIP-21.yml new file mode 100644 index 00000000..4c7b836a --- /dev/null +++ b/public/GIPs/GIP-21.yml @@ -0,0 +1,34 @@ +id: '0xfae50f95e3ae8f7dbd70e062cba35b0dcbe8261b2aaa874822b7d046e97367b6' +gip_number: '21' +url: https://snapshot.org/#/gnosis.eth/proposal/0xfae50f95e3ae8f7dbd70e062cba35b0dcbe8261b2aaa874822b7d046e97367b6 +title: Amendment to GIP-17. Send additional funds to daughter Safe +body: 'Should GnosisDAO implement GIP-21 as detailed in this forum post? + + + https://forum.gnosis.io/t/gip-21-amendment-to-gip-17-send-additional-funds-to-daughter-safe/2699 + + + Transactions in this proposal: + + - Send tokens to Daughter Safe' +start: 1641553200 +end: 1642158000 +state: closed +author: '0x2408F8a0475D3823A1F4A4bfD86B2a4B80E6eDB6' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 141170.3171749477 +scores: + - 141141.1531327937 + - 29.164042153983424 + - 0 +votes: 131 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'Low ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-22.yml b/public/GIPs/GIP-22.yml new file mode 100644 index 00000000..4a236022 --- /dev/null +++ b/public/GIPs/GIP-22.yml @@ -0,0 +1,32 @@ +id: '0x632b3303cf9677d9d381e8eaff3587ee80f76152ebcf62d5260c64d79e417972' +gip_number: '22' +url: https://snapshot.org/#/gnosis.eth/proposal/0x632b3303cf9677d9d381e8eaff3587ee80f76152ebcf62d5260c64d79e417972 +title: Partnership Agreement Between BalancerDAO & GnosisDAO +body: 'Should GnosisDAO implement GIP-22 as detailed in this forum post? + + + https://forum.gnosis.io/t/gip-22-partnership-agreement-between-balancerdao-gnosisdao/3102 + + + Balancer would transfer 200,000 BAL and Gnosis would transfer 9051 GNO.' +start: 1642764180 +end: 1643382000 +state: closed +author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 81579.20895571685 +scores: + - 81579.20895571685 + - 0 + - 0 +votes: 131 +quorum: 0 +funding: + amount: 200,000 + currency: BAL + confidence: High + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-23-redo0.yml b/public/GIPs/GIP-23-redo0.yml new file mode 100644 index 00000000..59b8bd75 --- /dev/null +++ b/public/GIPs/GIP-23-redo0.yml @@ -0,0 +1,32 @@ +id: '0x1e3d1b82263ea10863e88f605d2b10f90c3002df0a8b3e27db3a7e1525dcf49a' +gip_number: '23' +url: https://snapshot.org/#/gnosis.eth/proposal/0x1e3d1b82263ea10863e88f605d2b10f90c3002df0a8b3e27db3a7e1525dcf49a +title: 2nd amendment to GIP-17. Add authority of Instadapp SCW to daughter Safe +body: 'Should GnosisDAO add authority of the Instadapp DSA to the Daughter Safe as + detailed in this forum post? + + + https://forum.gnosis.io/t/gip-23-2nd-amendment-to-gip-17-add-authority-of-instadapp-scw-to-daughter-safe/3239 + + ' +start: 1643371200 +end: 1643976000 +state: closed +author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 38364.92486571324 +scores: + - 38364.92486571324 + - 0 + - 0 +votes: 111 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-23.yml b/public/GIPs/GIP-23.yml new file mode 100644 index 00000000..a4300b5a --- /dev/null +++ b/public/GIPs/GIP-23.yml @@ -0,0 +1,32 @@ +id: '0x700338be6de83b533516bfed95f51a96dd6680cfae9751366b69a592e2d8386a' +gip_number: '23' +url: https://snapshot.org/#/gnosis.eth/proposal/0x700338be6de83b533516bfed95f51a96dd6680cfae9751366b69a592e2d8386a +title: 2nd amendment to GIP-17. Add authority of Instadapp SCW to daughter Safe +body: 'Should GnosisDAO add authority of the Instadapp DSA to the Daughter Safe as + detailed in this forum post? + + + https://forum.gnosis.io/t/gip-23-2nd-amendment-to-gip-17-add-authority-of-instadapp-scw-to-daughter-safe/3239 + + ' +start: 1644235200 +end: 1644858000 +state: closed +author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 86335.16306629642 +scores: + - 82864.64677082036 + - 3470.5162954760644 + - 0 +votes: 91 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-24.yml b/public/GIPs/GIP-24.yml new file mode 100644 index 00000000..51c6e88f --- /dev/null +++ b/public/GIPs/GIP-24.yml @@ -0,0 +1,30 @@ +id: '0x9c53b972174d6947627b37ffa332bd9301b9f5d8328e8de62b63a601b71d0656' +gip_number: '24' +url: https://snapshot.org/#/gnosis.eth/proposal/0x9c53b972174d6947627b37ffa332bd9301b9f5d8328e8de62b63a601b71d0656 +title: 1st phase 50K GNO Incentives Program for Gnosis Chain as proposed in GIP-16 +body: 'Should GnosisDAO execute the 1st phase 50K GNO Incentives Program for Gnosis + Chain as detailed in this forum post? + + + https://forum.gnosis.io/t/gip-24-1st-phase-50k-gno-incentives-program-for-gnosis-chain-as-proposed-in-gip-16/3417' +start: 1647429755 +end: 1648047600 +state: closed +author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 78881.31252895085 +scores: + - 78881.31252895085 + - 0 + - 0 +votes: 95 +quorum: 0 +funding: + amount: 50,000 + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-25.yml b/public/GIPs/GIP-25.yml new file mode 100644 index 00000000..1d2a222e --- /dev/null +++ b/public/GIPs/GIP-25.yml @@ -0,0 +1,30 @@ +id: '0x1bced50847e2983ae4ba9ae00fd08e92a26059449c30c1dfd49bc077ecc3ee22' +gip_number: '25' +url: https://snapshot.org/#/gnosis.eth/proposal/0x1bced50847e2983ae4ba9ae00fd08e92a26059449c30c1dfd49bc077ecc3ee22 +title: Partner with Tornado Cash to increase GNO:TORN liquidity in Uniswap V3 +body: 'Should GnosisDAO partner with Tornado Cash to increase GNO:TORN liquidity as + detailed in this forum post? + + + https://forum.gnosis.io/t/gip-25-partner-with-tornado-cash-to-increase-gno-torn-liquidity-in-uniswap-v3/3418' +start: 1644318000 +end: 1644922800 +state: closed +author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 79476.92150540843 +scores: + - 78488.99146802588 + - 987.930037382559 + - 0 +votes: 93 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-26.yml b/public/GIPs/GIP-26.yml new file mode 100644 index 00000000..2e73c094 --- /dev/null +++ b/public/GIPs/GIP-26.yml @@ -0,0 +1,60 @@ +id: gip-26-partner-with-1inch-to-increase-gno-1inch-liquidity +gip_number: 26 +url: https://forum.gnosis.io/t/gip-26-partner-with-1inch-to-increase-gno-1inch-liquidity +title: 1INCH liquidity +body: "## Simple Summary\n\nThis is a continuation of [F117’s post](https://forum.gnosis.io/t/should-gnosisdao-partner-with-1inch-to-increase-gno-1inch-liquidity/3284).\ + \ \nAs part of the growth of GnosisDAO’s strategic partnerships, increasing the\ + \ liquidity of pairs with our GNO token and our partners’ is in our DAO’s best interest.\ + \ This creates synergy between us and our partners, strengthening both our token\ + \ and theirs in terms of potential price increase and reduced volatility.\n\n##\ + \ Abstract\n\nWe would partner with 1inch and create a GNO:1inch liquidity pool\ + \ that could be deposited on 1Inch protocol, running on Gnosis Chain. In this particular\ + \ case, there’s the positive side effect that increasing overall liquidity in the\ + \ Gnosis Chain also makes it more appealing for investors in the DeFi ecosystem\ + \ as both tokens would support each other’s prices, creating long term economic\ + \ alignment.\n\n## Motivation\n\n1inch is one of the most popular DEX Aggregators\ + \ in the DeFi ecosystem, and it lacks liquidity of the GNO:1INCH pair. We believe\ + \ that creating this liquidity pool will be beneficial for both tokens, contributing\ + \ to their long term price stability and providing users with sufficient liquid\ + \ funds to exchange their tokens.\n\n## Specification\n\nWe’d work jointly with\ + \ the 1inch team to create the liquidity pool in several batches to minimize slippage,\ + \ aiming for 0.1%, to prevent arbitration that would result in loss of funds for\ + \ 1inch and GnosisDAO.\n\n## Rationale\n\nThe iterative pool creation process is\ + \ a best practice which results in slippage minimization and reduced arbitrage opportunities\ + \ which lead to loss of funds from both parties, causing an evitable unwanted side\ + \ effect. \nThe 1inch team will lead the process, since the pool will most likely\ + \ be created in their platform.\n\n[Karpatkey: 2022 Year in Review for Gnosis](http://forum.gnosis.io/t/karpatkey-2022-year-in-review-for-gnosis/6431)\n" +start: 1643730950 +end: null +state: + - phase-2 +author: 'Karpatkey + + status: phase 2 + + type: Meta + + created: 2022-02-01 + + + + Simple Summary + + This i…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-27-redo0.yml b/public/GIPs/GIP-27-redo0.yml new file mode 100644 index 00000000..d7bdaf45 --- /dev/null +++ b/public/GIPs/GIP-27-redo0.yml @@ -0,0 +1,33 @@ +id: '0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61' +gip_number: '27' +url: https://snapshot.org/#/gnosis.eth/proposal/0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61 +title: Gnosis Guild 🪐 Treasury Allocation to Gnosis Ltd +body: 'The proposal would fund Gnosis Ltd. to support the Gnosis Guild team’s operations + and startup costs for one year. The Gnosis Guild Treasury Allocation would foster + needs-driven development of the Zodiac DAO tools at a total of USD ~$2.9 Million + equivalent, paid in 56% GNO for a contributor incentivization plan, administered + by Gnosis Guild with a two-year cliff followed by a one-year vesting period. + + + [Full proposal -->](https://forum.gnosis.io/t/gip-27-gnosis-guild-treasury-allocation-to-gnosis-ltd/3429)' +start: 1648557747 +end: 1649162547 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 108308.30495903963 +scores: + - 108224.3850090502 + - 5.217136755635344 + - 78.70281323376906 +votes: 309 +quorum: 0 +funding: + amount: 2.9 Million + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-27.yml b/public/GIPs/GIP-27.yml new file mode 100644 index 00000000..cd8058d3 --- /dev/null +++ b/public/GIPs/GIP-27.yml @@ -0,0 +1,28 @@ +id: '0xd9e0a46cd0c9cefb45ec53b194d08681109ee1a6c0cee3e699740fa14d20291b' +gip_number: '27' +url: https://snapshot.org/#/gnosis.eth/proposal/0xd9e0a46cd0c9cefb45ec53b194d08681109ee1a6c0cee3e699740fa14d20291b +title: '[redo]Gnosis Guild 🪐 Treasury Allocation to Gnosis Ltd' +body: This is a redo of the proposal for [GIP-27](https://snapshot.org/#/gnosis.eth/proposal/0x64c44314dd99f084a3267bd6c82c1c29d7bdcd6c3a105bf1cfd3e6cd4717ce61) + as the attached transactions were not executed in time and have subsequently expired. + 😅 +start: 1650892790 +end: 1651497590 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 193458.1773878814 +scores: + - 193450.47069473672 + - 5.281144641625198 + - 2.4255485030795865 +votes: 774 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-28.yml b/public/GIPs/GIP-28.yml new file mode 100644 index 00000000..8d49ac2f --- /dev/null +++ b/public/GIPs/GIP-28.yml @@ -0,0 +1,38 @@ +id: '0x521efc4aaa8e2d2e2405ae91207d07d872286257044dfca5aa7764c7f66dd3d8' +gip_number: '28' +url: https://snapshot.org/#/gnosis.eth/proposal/0x521efc4aaa8e2d2e2405ae91207d07d872286257044dfca5aa7764c7f66dd3d8 +title: Allow locked and staked GNO to vote +body: 'The proposal is [detail on the Gnosis forum](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357), + with the specification detailed in [this reply](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/18?u=auryn_macmillan). + + + # Simple summary + + The current Snapshot strategy only accounts for GNO on mainnet. The proposed update + accounts for GNO, LGNO, MGNO, and staked GNO on Gnosis Chain and Mainnet (where + applicable). + + + *Note: a future proposal will also account for GNO deposited in various AMMs and + lending protocols.*' +start: 1647531387 +end: 1648137600 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 87082.69296496826 +scores: + - 87082.16293775123 + - 0.1 + - 0.4300272170417151 +votes: 114 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-29-redo0.yml b/public/GIPs/GIP-29-redo0.yml new file mode 100644 index 00000000..505e0416 --- /dev/null +++ b/public/GIPs/GIP-29-redo0.yml @@ -0,0 +1,26 @@ +id: Qmd1zkgLEhQwUkY5oAQxznb2U8ZDkcmRpVBCZHjafvoD69 +gip_number: '29' +url: https://snapshot.org/#/gnosis.eth/proposal/Qmd1zkgLEhQwUkY5oAQxznb2U8ZDkcmRpVBCZHjafvoD69 +title: Extend GNO Token Lock by another 2 weeks for GIP29 +body: '' +start: 1645113984 +end: 1645373184 +state: closed +author: '0xc37506BF10d70eCDd8C6E2917bF4A07670c48aE3' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 118.41266695563579 +scores: + - 118.4126669556358 + - 0 + - 0 +votes: 41 +quorum: 0 +funding: + amount: null + currency: null + confidence: Low + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-29.yml b/public/GIPs/GIP-29.yml new file mode 100644 index 00000000..6cd441e6 --- /dev/null +++ b/public/GIPs/GIP-29.yml @@ -0,0 +1,41 @@ +id: '0x5187694133abfb3d140acce3b9ac2ecf033c657c816a18dc25d2e0c1a2a29ec7' +gip_number: '29' +url: https://snapshot.org/#/gnosis.eth/proposal/0x5187694133abfb3d140acce3b9ac2ecf033c657c816a18dc25d2e0c1a2a29ec7 +title: Spin-off SafeDAO and Launch Safe Token +body: 'This proposal ratifies: + + + - Spin-off the Gnosis Safe project from Gnosis Ltd. + + - Create a Safe Token to govern the Gnosis Safe ecosystem and infrastructure through + the establishment of an independent SafeDAO. + + - Setup the independent Safe Foundation in Switzerland to protect strategic off-chain + assets (IP, Github repositories, strategic investments), issue the Safe Token, and + foster the Gnosis Safe ecosystem. + + + [Full Proposal -->](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token) + + ' +start: 1649415518 +end: 1650020318 +state: closed +author: '0x88673F0ed0280cBd33C29f070DeE0a09948FAea9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 191079.79100087727 +scores: + - 190282.44985763263 + - 792.5155925659184 + - 4.8255506787302425 +votes: 928 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-3.yml b/public/GIPs/GIP-3.yml new file mode 100644 index 00000000..a2d42a06 --- /dev/null +++ b/public/GIPs/GIP-3.yml @@ -0,0 +1,36 @@ +id: QmdjWuBnBnPUafW9jBNNsJJvaeQAVExGcFZ7zB38VtNuu4 +gip_number: '3' +url: https://snapshot.org/#/gnosis.eth/proposal/QmdjWuBnBnPUafW9jBNNsJJvaeQAVExGcFZ7zB38VtNuu4 +title: Set the quorum for "yes" votes to 4% of the circulating supply of GNO +body: '# Simple Summary + + **Lower the quorum threshold for required "yes" votes to 4% of the circulating GNO + supply.** + + + *See the [forum post](https://forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915) + for more details and discussion.* + + + [forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915](https://forum.gnosis.io/t/gip-3-should-gnosisdao-lower-the-quorum-threshold-for-required-yes-gno/915)' +start: 1607922000 +end: 1608613140 +state: closed +author: '0xd714Dd60e22BbB1cbAFD0e40dE5Cfa7bBDD3F3C8' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 200807.89506428977 +scores: + - 200807.89506428977 + - 0 + - 0 +votes: 59 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-30.yml b/public/GIPs/GIP-30.yml new file mode 100644 index 00000000..7ed63097 --- /dev/null +++ b/public/GIPs/GIP-30.yml @@ -0,0 +1,37 @@ +id: gip-30-should-gnosisdao-reward-2300-gno-to-prysmatic-labs +gip_number: 30 +url: https://forum.gnosis.io/t/gip-30-should-gnosisdao-reward-2300-gno-to-prysmatic-labs +title: Should GnosisDAO reward 2300 GNO to Prysmatic Labs? +body: "## Summary\n\nShould GnosisDAO reward 2300 GNO to Prysmatic Labs?\n\nSince\ + \ the launch of the [Gnosis Beacon Chain](https://beacon.gnosischain.com/) over\ + \ 60000 validators were launched. Those validators almost exclusively run either\ + \ Prysm or Lighthouse clients.\n\nGiven the importance of Prysm for Gnosis Chain,\ + \ we suggest rewarding the Prysmatic Labs team with 2300 GNO for their work aligning\ + \ incentives with their team.\n\nIn return the Prysmatic Labs team will support\ + \ Gnosis Chain in the following ways:\n\n * A direct communication channel with\ + \ the Gnosis Chain Team.\n * Acceptance and maintenance of minor changes to Prysm\ + \ codebase to support Gnosis Chain.\n * Acknowledgment and timely review of any\ + \ performance, regression, or general reports from Gnosis regarding Prysm software.\n\ + \ * General feedback on gnosis chain and tooling.\n\n\n\n5 Likes\n" +start: 1646939789 +end: null +state: + - phase-2 +author: GnosisDAO +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: '2300' + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-31.yml b/public/GIPs/GIP-31.yml new file mode 100644 index 00000000..58de53bf --- /dev/null +++ b/public/GIPs/GIP-31.yml @@ -0,0 +1,29 @@ +id: '0xa5245b0893ee9faeefd865439751c6a96a6c948ce578c4eab2a12313b39bf1aa' +gip_number: '31' +url: https://snapshot.org/#/gnosis.eth/proposal/0xa5245b0893ee9faeefd865439751c6a96a6c948ce578c4eab2a12313b39bf1aa +title: Should Gnosis Chain perform a Hardfork to upgrade the token contract vulnerable + to the reentrancy attack? +body: The hard fork assumes to update Gnosis Chain spec file (explicitly or through + node upgrading with the new internal spec) on all nodes and upgrade the nodes themselves + to the new version supporting dao-like hard forks. +start: 1650216802 +end: 1650821602 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 63438.93959378386 +scores: + - 63276.354651802576 + - 0.2178027672264804 + - 162.3671392140603 +votes: 532 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-32.yml b/public/GIPs/GIP-32.yml new file mode 100644 index 00000000..45514028 --- /dev/null +++ b/public/GIPs/GIP-32.yml @@ -0,0 +1,53 @@ +id: '0x34b39da3317f217bf414feb781042a6f255982f4a0c2aad4f2945866e74bf95d' +gip_number: '32' +url: https://snapshot.org/#/gnosis.eth/proposal/0x34b39da3317f217bf414feb781042a6f255982f4a0c2aad4f2945866e74bf95d +title: Reimburse expenditures to the Gnosis Chain Core Development Unit (formerly + xDai Chain team) +body: 'Summary + + GIP-32 requests reimbursement of infrastructure and marketing-related expenditures + to the Gnosis Chain Core Development Unit (formerly xDai Chain team) for the period + spanning the token merge (GIP-16 implementation) through March 1st, 2022. + + + Motivation + + The Gnosis Chain Core Development Unit is a critical component of the evolving Gnosis + ecosystem. Previous expenditures were provided up-front by the team to facilitate + client development and bootstrap the consensus-layer validator set. These were distributed + from an independent fund managed by the Core Dev Unit to expedite processes with + the expectation that they would be reimbursed at a future date. This GIP details + prior expenditures and requests they are reimbursed from the GnosisDAO treasury. + + + ![image](ipfs://QmNbgiSD9x1pt4nm9CzHKB8Tvk7Ka2NZFwmto1cy3Gjvn2) + + + Implementation + + The Unit has a multi-signature wallet to administer the funds allocated to fulfilling + the mandate. The details of this multi-sig wallet are as follows: + + + Multisig address on ETH mainnet: 0x5E78C09984bd6608f8E913F0924062C043eD6ad7' +start: 1649239154 +end: 1649843954 +state: closed +author: '0x7D7DcEf3bB919347F5031127799ee2679A9111A0' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 155985.79006397788 +scores: + - 155985.5084921285 + - 0.12627464414891498 + - 0.15529720523870943 +votes: 566 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-33.yml b/public/GIPs/GIP-33.yml new file mode 100644 index 00000000..c8924b1a --- /dev/null +++ b/public/GIPs/GIP-33.yml @@ -0,0 +1,29 @@ +id: '0x66cc99dde505a77ae6fb1371c075f4eb36abbba06189d108b2020947484fa49c' +gip_number: '33' +url: https://snapshot.org/#/gnosis.eth/proposal/0x66cc99dde505a77ae6fb1371c075f4eb36abbba06189d108b2020947484fa49c +title: 'Send vested COW tokens to daughter Safe for treasury management ' +body: 'Should Gnosis DAO send vested COW tokens to daughter Safe for treasury management? + + + https://forum.gnosis.io/t/gip-33-should-gnosis-dao-send-vested-cow-tokens-to-daughter-safe-for-treasury-management/4453' +start: 1649968938 +end: 1650573738 +state: closed +author: '0xe965484BA4250c446779D4703f1598DC2EA00d12' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 148037.82368390795 +scores: + - 148025.58429791607 + - 1.051077759903439 + - 11.1883082320004 +votes: 465 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-34.yml b/public/GIPs/GIP-34.yml new file mode 100644 index 00000000..efd9b6e0 --- /dev/null +++ b/public/GIPs/GIP-34.yml @@ -0,0 +1,30 @@ +id: '0xd8d2657cb3d7c711978b58de7cdd956541f72832809e73fbd2c122b6a5fd6e1e' +gip_number: '34' +url: https://snapshot.org/#/gnosis.eth/proposal/0xd8d2657cb3d7c711978b58de7cdd956541f72832809e73fbd2c122b6a5fd6e1e +title: Should Gnosis DAO support in a reimbursement plan to the Agave Community? +body: The motivation for this proposal is to make sure the Agave community and affected + GC users are reimbursed at the end of this operation and that the community and + protocol can continue the journey that started one year ago. We believe it is critical + for the chain to make sure a significant amount of the long-term builders, supporters, + and communities in the chain are restored on their losses as much as possible. +start: 1649688035 +end: 1650292835 +state: closed +author: '0xc44caeb7F0724A156806664d2361fD6f32a2d2C8' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 97912.53542649369 +scores: + - 96857.43654326974 + - 778.5120599694304 + - 276.58682325448115 +votes: 630 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-35.yml b/public/GIPs/GIP-35.yml new file mode 100644 index 00000000..82dbe503 --- /dev/null +++ b/public/GIPs/GIP-35.yml @@ -0,0 +1,31 @@ +id: '0xdeadb69e1c18ea78e6592664d2be34f7705ebb040c0b1788514b39bd9a2e2096' +gip_number: '35' +url: https://snapshot.org/#/gnosis.eth/proposal/0xdeadb69e1c18ea78e6592664d2be34f7705ebb040c0b1788514b39bd9a2e2096 +title: The target total supply should be 3M GNO? +body: 'This GIP would improve economics and clarity of GNO rules by targeting 3M GNO + total supply. It would also formally veto the GnosisDAO treasury for voting, giving + more voting power to GNO holders. + + + https://forum.gnosis.io/t/gip-35-the-target-total-supply-should-be-3m-gno/4685' +start: 1650993954 +end: 1651598754 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 328264.5800297518 +scores: + - 326951.8460755976 + - 1302.099837240443 + - 10.634116913854475 +votes: 881 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-36.yml b/public/GIPs/GIP-36.yml new file mode 100644 index 00000000..42f00191 --- /dev/null +++ b/public/GIPs/GIP-36.yml @@ -0,0 +1,34 @@ +id: '0x391d0d6f4b9315347605ecf053a14474faa461ea0a31e69b7e9e1895c31c3a2a' +gip_number: '36' +url: https://snapshot.org/#/gnosis.eth/proposal/0x391d0d6f4b9315347605ecf053a14474faa461ea0a31e69b7e9e1895c31c3a2a +title: Should GnosisDAO fund BuidlGuidl 3 ETH per quarter? +body: 'The BuidlGuidl is a curated group of Ethereum builders creating prototypes + and tutorials to enrich the ecosystem. They actively maintain scaffold-eth. Austin + Griffith and BuidlGuidl can be a source of new talent for the Gnosis ecosystem. + We can think of new quests to add, which might lead to new hires for Safe, CowSwap, + or Gnosis Chain projects. + + + This GIP proposes to fund BuidlGuidl with 3 ETH per quarter sent to buidlguidl.eth + from the GnosisDAO treasury.' +start: 1651595561 +end: 1652200361 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 86754.93861010374 +scores: + - 86587.72187842286 + - 127.152128117465 + - 40.06460356342636 +votes: 738 +quorum: 0 +funding: + amount: '3' + currency: ETH + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-37.yml b/public/GIPs/GIP-37.yml new file mode 100644 index 00000000..ef0c5233 --- /dev/null +++ b/public/GIPs/GIP-37.yml @@ -0,0 +1,31 @@ +id: '0xc259665ade2a09959d0978d31708537d42ade4c1fc9b9c459cf08611188f76de' +gip_number: '37' +url: https://snapshot.org/#/gnosis.eth/proposal/0xc259665ade2a09959d0978d31708537d42ade4c1fc9b9c459cf08611188f76de +title: Should GnosisDAO pass a Grant Proposal to partner with Erigon? +body: Gnosis has been a long-term supporter of Erigon’s development believing in the + significance of improving L1 clients. Every improvement on L1 is an upside for everyone + operating on top. Given the importance of strong L1 clients for Gnosis Chain and + the unique value proposition of Erigon, the Erigon team should be supported with + a significant grant of 2m DAI upfront and 24k GNO vested over 3 years allowing us + to focus on Gnosis Chain. +start: 1650645478 +end: 1651250278 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 182019.8233142736 +scores: + - 181686.93848145075 + - 291.7462475437427 + - 41.13858527913516 +votes: 647 +quorum: 0 +funding: + amount: 2,000,000 + currency: DAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-38.yml b/public/GIPs/GIP-38.yml new file mode 100644 index 00000000..36955e1d --- /dev/null +++ b/public/GIPs/GIP-38.yml @@ -0,0 +1,36 @@ +id: '0x573707c047a3a3581ed25b91088a3aa7b4813e79d04aa67b576f151eca7f05ef' +gip_number: '38' +url: https://snapshot.org/#/gnosis.eth/proposal/0x573707c047a3a3581ed25b91088a3aa7b4813e79d04aa67b576f151eca7f05ef +title: Should GnosisDAO fund a Gnosis Chain ecosystem growth initiative? +body: 'The GnosisDAO should fund a concerted ecosystem development effort to support + developers and projects building on the Gnosis Chain with investments, grants, technical + supports, business development and marketing. + + + As soon as the structure for the investment fund is ready, GnosisDAO commits to + send $59.36M worth of stablecoins to the designated fund multisig. + + + As soon as the structure for the operations company is ready, GnosisDAO commits + to send $20M worth of stablecoins and 50k GNO to the designated company multisg.' +start: 1651162151 +end: 1651766951 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 143093.97341955925 +scores: + - 137154.8685425695 + - 3846.8241831188416 + - 2092.2806938709086 +votes: 831 +quorum: 0 +funding: + amount: 59.36M + currency: USD (assuming stablecoins are pegged to USD) + confidence: High + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-39.yml b/public/GIPs/GIP-39.yml new file mode 100644 index 00000000..097303c4 --- /dev/null +++ b/public/GIPs/GIP-39.yml @@ -0,0 +1,31 @@ +id: '0x7b1a6d6a550738d45bb8063fadcbb2b9653141ab0b9a19c5011b5fe2d4134ba0' +gip_number: '39' +url: https://snapshot.org/#/gnosis.eth/proposal/0x7b1a6d6a550738d45bb8063fadcbb2b9653141ab0b9a19c5011b5fe2d4134ba0 +title: Should GnosisDAO fund the DAOstar One initiative? +body: '$20,000 to fund an ecosystem collaboration around interoperable standards for + DAOs and DAO tooling, as part of a co-funding round led by key organizations in + the DAO ecosystem. + + + https://forum.gnosis.io/t/gip-39-should-gnosisdao-fund-the-daostar-one-initiative/4712/1' +start: 1651081032 +end: 1651685832 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 114268.32204443366 +scores: + - 114254.07811486912 + - 0.3114845300830897 + - 13.932445034450003 +votes: 718 +quorum: 0 +funding: + amount: 20,000 + currency: $ + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-40.yml b/public/GIPs/GIP-40.yml new file mode 100644 index 00000000..3d229ec9 --- /dev/null +++ b/public/GIPs/GIP-40.yml @@ -0,0 +1,39 @@ +id: '0x1229020e53e1b973192e8c274e5109970ab58cc9127ae4d438aad7943d451ae9' +gip_number: '40' +url: https://snapshot.org/#/gnosis.eth/proposal/0x1229020e53e1b973192e8c274e5109970ab58cc9127ae4d438aad7943d451ae9 +title: 'Should Gnosis DAO support a reimbursement plan to the Hundred Finance Community + in the following manner? ' +body: 'On March 15th, 2022, the Gnosis Chain deployment of the Hundred Finance lending + platform was exploited. This exploit drained liquidity across all of Hundred Finance’s + Gnosis Chain markets, resulting in a loss of the equivalent of around $6.4m USD + in user funds (calculated using asset prices at the time of the attack). + + + The Hundred Finance team seeks to put forward this new version of a previously raised + proposal that similarly seeks to respond to the exploit on behalf of its affected + users by implementing a reimbursement plan in which they and the Gnosis DAO work + together to make whole those who have been adversely impacted. + + + Please reference the entire proposal by clicking the discussion link below. ' +start: 1651594975 +end: 1652199775 +state: closed +author: '0x74b926358f43a06665C9733Ff4f1A79d1dceC49E' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 90796.04687114357 +scores: + - 81535.36590171546 + - 9193.13620072608 + - 67.54476870199478 +votes: 734 +quorum: 0 +funding: + amount: 6.4m + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-41.yml b/public/GIPs/GIP-41.yml new file mode 100644 index 00000000..15f65c15 --- /dev/null +++ b/public/GIPs/GIP-41.yml @@ -0,0 +1,27 @@ +id: '0x84380477f05620ec1e27be75833b90cdda44b1a1ecb905d4a42b68c25640961b' +gip_number: '41' +url: https://snapshot.org/#/gnosis.eth/proposal/0x84380477f05620ec1e27be75833b90cdda44b1a1ecb905d4a42b68c25640961b +title: GIP-41 Should GnosisDAO Partner with Giveth to Increased Sustainable Liquidity? +body: Mutually beneficial token swap to create a 1M USD equivalent shared liquidity + pool of $500k GIV <> $500k GNO on Honeyswap (Gnosis Chain). +start: 1652754648 +end: 1653359448 +state: closed +author: '0xbc42dD78EE35D8F165440749F98C7Ec93F0c4033' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 131153.66358357065 +scores: + - 131116.181224077 + - 0.19216576778192407 + - 37.29019372586643 +votes: 610 +quorum: 0 +funding: + amount: 1,000,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-42.yml b/public/GIPs/GIP-42.yml new file mode 100644 index 00000000..d5ecd32c --- /dev/null +++ b/public/GIPs/GIP-42.yml @@ -0,0 +1,46 @@ +id: '0x1a0a2187520c70a0c37ab1aedccdda97c12453a709dd217b5456d610cbaaaa10' +gip_number: '42' +url: https://snapshot.org/#/gnosis.eth/proposal/0x1a0a2187520c70a0c37ab1aedccdda97c12453a709dd217b5456d610cbaaaa10 +title: Should $10M in GNO be used to foster the usage of Uniswap v3 on Gnosis Chain? +body: 'A large directive for the Gnosis Chain is to increase the user base and on-chain + activity by strategically allocating funds from the GnosisDAO treasury to promote + adoption. An ecosystem fund has been created for this purpose, and we propose to + use a portion of these funds to promote Uniswap v3 on Gnosis Chain. We propose providing + up to $10M to incentivize the adoption of Uniswap v3 on Gnosis Chain. + + + Details for incentivized Adoption of Uniswap v3 + + + The $10M will be provided in GNO to foster the usage of Uniswap v3 on Gnosis Chain. + The incentives should be designed together with other projects, which are operating + on top of Uniswap v3 such as Perpetual Protocol, Gelato, or Stakewise. This should + allow for more sustainable utilization of Uniswap as Gnosis Chain doesn’t have a + team dedicated to Uniswap v3. The GNO can be used to incentivize liquidity but should + not be limited to this use case. Anything increasing usage of Uniswap v3, including + building new applications on top of Uniswap v3 should be supported. The goal is + to spend the $10M in the time period of 2 years. Funds not used after two years + would go back to GnosisDAO. The spending is limited to $10M and the transferred + amount of GNO as part of the proposal. GnosisDAO can decide to top up this amount + based on the outcome of this initiative.' +start: 1652362561 +end: 1652967361 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 133073.09734005702 +scores: + - 132941.09051992954 + - 58.81220165266376 + - 73.19461847474483 +votes: 912 +quorum: 0 +funding: + amount: 10,000,000 + currency: $ (USD) + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-44.yml b/public/GIPs/GIP-44.yml new file mode 100644 index 00000000..fe0eda39 --- /dev/null +++ b/public/GIPs/GIP-44.yml @@ -0,0 +1,35 @@ +id: '0x2dabb9a7bdf9d4a964579dc3ad15af771261a42f4efc74a7f847e7860a651170' +gip_number: '44' +url: https://snapshot.org/#/gnosis.eth/proposal/0x2dabb9a7bdf9d4a964579dc3ad15af771261a42f4efc74a7f847e7860a651170 +title: Allow GNO holders to vote with invested/staked/locked positions in mainnet/gc +body: 'Following from GIP-28, this proposal enables those holding and using GNO in + a greater number of places to retain their vote in the GnosisDAO. + + + Currently, the GnosisDAO’s Snapshot strategy counts GNO on mainnet and Gnosis Chain, + along with LGNO, mGNO, and some GBC staking deposits on Gnosis Chain. + + + If approved, this proposal will allow users providing liquidity on various AMMs + to retain their voting power, along with counting all GBC staking deposits.' +start: 1652796837 +end: 1653401637 +state: closed +author: '0x53bcFaEd43441C7bB6149563eC11f756739C9f6A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 134098.8930439684 +scores: + - 134047.5221251944 + - 40.31806902839211 + - 11.052849745595813 +votes: 852 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-45.yml b/public/GIPs/GIP-45.yml new file mode 100644 index 00000000..facc0a33 --- /dev/null +++ b/public/GIPs/GIP-45.yml @@ -0,0 +1,31 @@ +id: '0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1' +gip_number: '45' +url: https://snapshot.org/#/gnosis.eth/proposal/0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1 +title: Should Trustlines Network migrate to Gnosis Chain? +body: 'We propose to migrate the Trustlines Network to the Gnosis Chain and, in the + process, change our identity implementation to use Gnosis Safe. + + + We are requesting funding of 120,000 EUR paid in DAI or GNO tokens. We expect the + work to take between two to four months.' +start: 1653908212 +end: 1654513012 +state: closed +author: '0x21D9bD6099507134a92d2943EcCbADFaBFE1E25e' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 83477.19847840212 +scores: + - 83290.66657671673 + - 176.58744012121173 + - 9.944461564152029 +votes: 749 +quorum: 0 +funding: + amount: 120,000 + currency: EUR + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-46.yml b/public/GIPs/GIP-46.yml new file mode 100644 index 00000000..23a1f0c0 --- /dev/null +++ b/public/GIPs/GIP-46.yml @@ -0,0 +1,29 @@ +id: '0x41af607ec45f147b6f0196353f29c5e25951097c64c3a0a703bc519bd1883578' +gip_number: '46' +url: https://snapshot.org/#/gnosis.eth/proposal/0x41af607ec45f147b6f0196353f29c5e25951097c64c3a0a703bc519bd1883578 +title: Should GNO from the GnosisDAO Safe be transferred to the treasury management + safe operated by Karpatkey? +body: All GNO from the GnosisDAO Safe should be transferred to the treasury management + safe operated by Karpatkey. This will allow GnosisDAO to use GNO as collateral for + loans and payouts of GNO for grants. +start: 1653058160 +end: 1653662960 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 129204.75485924087 +scores: + - 129159.39108746796 + - 27.1487080656233 + - 18.215063707291183 +votes: 774 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-47.yml b/public/GIPs/GIP-47.yml new file mode 100644 index 00000000..11332d76 --- /dev/null +++ b/public/GIPs/GIP-47.yml @@ -0,0 +1,29 @@ +id: '0x495858ef8aef07fc20662023f1690d60150339a09c620d25d76cbf49061bc0bf' +gip_number: '47' +url: https://snapshot.org/#/gnosis.eth/proposal/0x495858ef8aef07fc20662023f1690d60150339a09c620d25d76cbf49061bc0bf +title: Should GnosisDAO pass a Grant Proposal to form a long-term partnership with + Nethermind, Gnosis Chain’s primary node? +body: Nethermind is a vital part of Gnosis Chain. The Nethermind team should be supported + with a significant grant of 3m DAI upfront and 20k GNO vested over 3 years allowing + us to focus on Gnosis Chain. +start: 1653927394 +end: 1654532194 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 174397.1513691828 +scores: + - 174191.0082820708 + - 57.66245134048024 + - 148.4806357715174 +votes: 571 +quorum: 0 +funding: + amount: 3,000,000 + currency: DAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-48.yml b/public/GIPs/GIP-48.yml new file mode 100644 index 00000000..16a52128 --- /dev/null +++ b/public/GIPs/GIP-48.yml @@ -0,0 +1,30 @@ +id: '0x012d04c8351991da79e92f4088527c76b6139b9aa0b71772b704b587d2c9c0e3' +gip_number: '48' +url: https://snapshot.org/#/gnosis.eth/proposal/0x012d04c8351991da79e92f4088527c76b6139b9aa0b71772b704b587d2c9c0e3 +title: Should GnosisDAO implement the Praise reward system around the Gnosis Chain + Validator program? +body: 'The Praise system can benefit and grow the Gnosis Chain validator community. + Verified validators in the Gnosis Chain and GnosisDAO Discord can earn small amounts + of GNO for helping community members and for onboarding those interested in running + a validator. ' +start: 1654223456 +end: 1654828256 +state: closed +author: '0xEf0391ccbebf15fc84334D9630255093754cDAAB' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 124531.90219035951 +scores: + - 124476.80327484835 + - 52.647236401691735 + - 2.451679109461167 +votes: 707 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-49.yml b/public/GIPs/GIP-49.yml new file mode 100644 index 00000000..d3af0258 --- /dev/null +++ b/public/GIPs/GIP-49.yml @@ -0,0 +1,48 @@ +id: '0xf7d4422d6089c9499d7bb9c50100a32dfd4e9b62ce9e0a112a1cfcd4a4ca5512' +gip_number: '49' +url: https://snapshot.org/#/gnosis.eth/proposal/0xf7d4422d6089c9499d7bb9c50100a32dfd4e9b62ce9e0a112a1cfcd4a4ca5512 +title: Should GnosisDAO do a BFF Partnership with MakerDAO? +body: 'GnosisDAO and MakerDAO are naturally aligned with DAI as a common denominator. + Gnosis Chain uses bridged DAI as its gas token so DAI’s adoption is critical for + the success of the network. + + + Gnosis Ltd has already started buying MKR aggressively in the open market so it + makes sense to align efforts with the GnosisDAO. Therefore, we propose the following: + + + 1. Propose a token swap GNO-MKR of around $70 million to the Maker community + + 2. Explore the use of an institutional MakerDAO vault with the GnosisDAO treasury + using GNO + stETH and mint 100 million DAI to be used for the development of the + Gnosis Chain + + 3. Explore a GNO grant with MakerDAO growth core unit to expand global adoption + and brand awareness of Gnosis Chain + + 4. Rebranding xDAI to DAI + + 5. Increase GNO incentives to DAI pairs on Gnosis Chain + + 6. Periodically buy MKR in the open market using GnosisDAO’s treasury farming rewards' +start: 1655200800 +end: 1655805600 +state: closed +author: '0x78602290159C7A4bDf9529fcfF1243534d3A6Cb9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 87883.87969902478 +scores: + - 87878.54906003183 + - 5.173239307366117 + - 0.15739968560571488 +votes: 690 +quorum: 0 +funding: + amount: 70,000,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-5.yml b/public/GIPs/GIP-5.yml new file mode 100644 index 00000000..163ad0ff --- /dev/null +++ b/public/GIPs/GIP-5.yml @@ -0,0 +1,55 @@ +id: QmfEpoQtvjWMeRwfeFvothLDkFqaXCZNHU9ZFb3S3cuLRU +gip_number: '5' +url: https://snapshot.org/#/gnosis.eth/proposal/QmfEpoQtvjWMeRwfeFvothLDkFqaXCZNHU9ZFb3S3cuLRU +title: Remove Gnosis Impact from the GnosisDAO Governance Process +body: "See the Forum post for all details and discussion: https://forum.gnosis.io/t/gip-5-remove-gnosis-impact-from-the-gnosisdao-governance-process/1058\ + \ \n\nTl;dr\n\nGnosis Impact is currently an integral component of the Gnosis governance\ + \ process. The current implementation of Gnosis Impact has known flaws and poses\ + \ uncalled-for obstacles to pass proposals through the governance process. I therefore\ + \ propose to exclude the obligatory utilization of Gnosis Impact as part of the\ + \ GnosisDAO’s governance process phase 3 until a proposal passes amending its shortcomings.\n\ + \n\nThe Proposal\n\nThe GnosisDAO governance process currently consists of three\ + \ phases:\n1. Informal discussion on Gnosis Forum regarding potential proposal\n\ + 2. Creation of a GIP in the Gnosis Forum, including a Forum poll\n3. Creation\ + \ of proposal on Snapshot + creation of two prediction markets on Omen, with one\ + \ market collateralized in GNO and the other collateralized in a stablecoin + setting\ + \ up the Gnosis Impact plugin.\n\nAs described above, phase 3 of the GnosisDAO Governance\ + \ process is complex and cost intensive, making it less attractive and accessible\ + \ for individuals to move their proposal forward to the final and essential governance\ + \ stage that will decide on the implementation of a proposal.\n\nOther than the\ + \ complexity of setting up Gnosis Impact, the tool itself currently has a few inherent\ + \ flaws:\n- Due to Omen’s Fixed Product Market Maker (FPMM), all funds provided\ + \ to set up the prediction markets are lost: once it becomes clear how the vote\ + \ will turn out traders will buy all the winning tokens. This is making any proposal\ + \ very cost intensive.\n- As setting up Gnosis Impact is very capital intensive,\ + \ it is not worthwhile to process any proposal that involves less than $100k. \n\ + - Price impacts projected by Gnosis Impact are not very accurate as a) the market\ + \ prices for the outcome tokens can only be found as long as it is still open which\ + \ decision will be made on Snapshot and b) because potential profit opportunities\ + \ are debilitated by Omen fees and gas fees. \n\nOnly two proposals have so far\ + \ been processed through phase 3 since GnosisDAO went live in November of last year,\ + \ underlining the complexity of passing proposals through the final stage. Removing\ + \ Gnosis Impact as a mandatory step will make GnosisDAO’s governance process simpler\ + \ and economically viable and will allow more individuals to push their proposal\ + \ to the final stage of governance." +start: 1613455200 +end: 1613754000 +state: closed +author: '0x28eFf6Ece9d2f1e0B5E18D34b50E01a0c91d0c99' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 62025.81640719549 +scores: + - 61185.64040719549 + - 840.1759999999999 + - 0 +votes: 39 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-50.yml b/public/GIPs/GIP-50.yml new file mode 100644 index 00000000..15da22d3 --- /dev/null +++ b/public/GIPs/GIP-50.yml @@ -0,0 +1,43 @@ +id: '0x29999cc9fc63fcf386bcbb8bd86d676a6736b0786305d564a642808dacd84611' +gip_number: '50' +url: https://snapshot.org/#/gnosis.eth/proposal/0x29999cc9fc63fcf386bcbb8bd86d676a6736b0786305d564a642808dacd84611 +title: Should TrustSwap deploy smart contract utilities on Gnosis Chain? +body: "https://forum.gnosis.io/t/gip-50-should-trustswap-deploy-smart-contract-utilities-on-gnosis-chain/5282?u=trustswap\n\ + \n[TrustSwap](https://trustswap.com/) is requesting a grant of $50,000 from the\ + \ Gnosis Ecosystem Fund to deploy a full suite of secure smart contract services\ + \ to the Gnosis blockchain.\n\nThis will include:\n\nToken Locks: Our token lock\ + \ platform currently has over $6B TVL across several major blockchains. These secure\ + \ time-locked contracts allow teams to lock up their tokens over a preset period\ + \ of time in a trustless way. This includes Liquidity Pair (LP) tokens and NFTs\ + \ as well.\n\nToken Mint: Anyone can easily generate a new token contract that is\ + \ fully audited and customizable without needing to write any code or hire expensive\ + \ developers. Mint makes it easy to tokenize any project, business, or community.\n\ + \nVesting: The TrustSwap Vesting portal provides a simple and secure way for projects\ + \ to distribute their tokens over time to their team and community. The tokens are\ + \ released in regular increments and users can claim their available tokens whenever\ + \ they want.\n\nBy using TrustSwap services, crypto projects can easily create,\ + \ secure, and launch their new tokens across multiple blockchains currently including\ + \ Ethereum, Polygon, Binance Smart Chain, Avalanche, and more. We would like to\ + \ add Gnosis to this list and appreciate the support of the GnosisDAO community.\ + \ \n\nIf you have any questions, please email info@trustswap.org. Thank you." +start: 1655244000 +end: 1655848800 +state: closed +author: '0x3Fb8410a19137715b430d515996F5D902deC7dD7' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 2033.34308938172 +scores: + - 475.71962348989814 + - 344.141538732446 + - 1213.4819271593726 +votes: 622 +quorum: 0 +funding: + amount: 50,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-51.yml b/public/GIPs/GIP-51.yml new file mode 100644 index 00000000..41558c87 --- /dev/null +++ b/public/GIPs/GIP-51.yml @@ -0,0 +1,36 @@ +id: '0x75bd61f48bb1cc4c9e2dd4938036095d581a99f2c186cb0a0c83914253f45634' +gip_number: '51' +url: https://snapshot.org/#/gnosis.eth/proposal/0x75bd61f48bb1cc4c9e2dd4938036095d581a99f2c186cb0a0c83914253f45634 +title: Should GnosisDAO fund the LabDAO project? +body: "Decentralised Science is a movement exploring new ways to 1) fund, 2) do and\ + \ 3) distribute science using web3 tools. LabDAO is building online laboratories\ + \ for scientist to come together and do research. To enable this, we develop three\ + \ tools:\n\n1. An exchange for laboratory services\n2. An onboarding and team-formation\ + \ process for scientists new to web3\n3. An endowment for funding scientific open-source\ + \ developers and inventors\n\nTo support the development of the LabDAO project,\ + \ we ask the GnosisDAO community for 250,000 USD worth of funding in return for\ + \ 1,000,000 LAB future governance and utility tokens.\n\nYou can learn more about\ + \ this proposal in the [governance forum](https://forum.gnosis.io/t/gip-51-should-gnosisdao-fund-the-labdao-project/5288)\ + \ and our [memo](memo.labdao.xyz). \n\nThis governance vote includes a transaction:\n\ + 250,000 FRAX to labdao.eth (eth:0xcaf6A0c4468087d76e6B2917cea10F0E1aA2f9D4)\n" +start: 1655654561 +end: 1656259361 +state: closed +author: '0x64BC15E0A5A12dDbe321EEDD832d057775D11F56' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 165599.17729734717 +scores: + - 90047.70561374047 + - 75535.94601599932 + - 15.525667607435452 +votes: 363 +quorum: 0 +funding: + amount: 250,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-52.yml b/public/GIPs/GIP-52.yml new file mode 100644 index 00000000..4af8225c --- /dev/null +++ b/public/GIPs/GIP-52.yml @@ -0,0 +1,36 @@ +id: '0x5525ab62fffc1102f46fca9ed629ba9a5cd111b1663bd6bb2cb984472325d191' +gip_number: '52' +url: https://snapshot.org/#/gnosis.eth/proposal/0x5525ab62fffc1102f46fca9ed629ba9a5cd111b1663bd6bb2cb984472325d191 +title: Should former xDai team be involved in future Gnosis Chain development? +body: 'The former xDAI team has been instrumental in the operations and the success + of Gnosis Chain. We see big value in continuing with the team, which has accumulated + extraordinary knowledge about the technology and ecosystem of the Gnosis Chain. + + + We propose to use the funds of the former xDAI ecosystem fund (https://etherscan.io/address/0x5e78c09984bd6608f8e913f0924062c043ed6ad7) + to fund the team to contribute to the Gnosis Chain ecosystem in various ways described + in the temperature check proposal: + + + https://snapshot.org/#/gnosis.eth/proposal/0x8c89a5ce77a2ec8d18708777813dcb3e2367a212d76604b93487fb829ed0e6b3' +start: 1655292875 +end: 1655897675 +state: closed +author: '0x6d9ABa400a2a487a5Fb76c6d56518835553CD284' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 126860.32897543388 +scores: + - 103379.23080565956 + - 23476.325736620944 + - 4.772433153425544 +votes: 679 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-53.yml b/public/GIPs/GIP-53.yml new file mode 100644 index 00000000..3f0ee8ce --- /dev/null +++ b/public/GIPs/GIP-53.yml @@ -0,0 +1,69 @@ +id: '0x397b3b0891a1874b34ae60bc95e83293c5599efb3783c602a39939f7754ad6a5' +gip_number: '53' +url: https://snapshot.org/#/gnosis.eth/proposal/0x397b3b0891a1874b34ae60bc95e83293c5599efb3783c602a39939f7754ad6a5 +title: Should GnosisDAO sponsor Necromorfo’s Cryptorock Tour 2022? +body: 'The Cryptorock Tour proposal aims to execute a web3 onboarding tour in 14 different + cities in Mexico with presentations from the band [Necromorfo](https://instagram.com/necro_morfo) + supported by projects like [Rockoboy](https://www.instagram.com/rockoboyoff/), [Pajaros + Vampiro](https://www.instagram.com/pajarosvampiro/) and [The Froys](https://www.instagram.com/thefroysmx/), + as well as local bands from each city. + + + The Gnosis Chain ecosystem will provide the infrastructure for the onboardings, + using tools such as: + + * Chainlist.org + + * Tip Party (by Moonshot Collective) + + * POAP + + * Honeyswap + + * Giveth + + * Agave + + * [Suarmi](https://suarmi.com) and [Connext](https://bridge.connext.network) bridges + + + A deep insight into the planning and logistics can be found in the [Gnosis discussion + forum](https://forum.gnosis.io/t/gip-53-should-gnosisdao-sponsor-necromorfos-cryptorock-tour-2022/5314), + as well as supporting media and documents. + + + * GnosisDAO will provide **$15,000.00 xDAI** to Necromorfo, in exchange for onboardings, + live shows and brand placement in 14 cities across Mexico. + + * The tour aims to reach at least 1,200 show attendees, of which our goal is to + onboard a 10% to Gnosis Chain. + + * A follow-up with local communities in the next months after the tour will encourage + further local onboardings using Gnosis Chain. + + * The funds provided by GnosisDAO will be transparent at all moment. A detailed, + updated pre-production expense report can be found [here](https://docs.google.com/spreadsheets/d/1vea48si-0ueNRanP6YlQjOxXuXs4B4e3qydpENm0K4Q/edit?usp=sharing). + + * Necromorfo will include a feature documentary film executive-produced by GnosisDAO + around the tour in their deliveries.' +start: 1655759864 +end: 1656364664 +state: closed +author: '0xB22981bA3FE1De2325935c91a3B717168fB86714' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 106450.0558508804 +scores: + - 106193.18269779914 + - 234.1713301786316 + - 22.70182290261135 +votes: 337 +quorum: 0 +funding: + amount: 15,000.00 + currency: xDAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-54.yml b/public/GIPs/GIP-54.yml new file mode 100644 index 00000000..700a8bff --- /dev/null +++ b/public/GIPs/GIP-54.yml @@ -0,0 +1,134 @@ +id: '0x911c480edc98a5aba0d07b32ae3b893721619c8fb22413daf5775f6702a319a9' +gip_number: '54' +url: https://snapshot.org/#/gnosis.eth/proposal/0x911c480edc98a5aba0d07b32ae3b893721619c8fb22413daf5775f6702a319a9 +title: Should GnosisDAO support hosting and feature updates for Blockscout Explorer? +body: 'Blockscout + + + Blockscout is an invaluable open-source tool for exploring, confirming, and inspecting + transactions on the Gnosis Chain. It supports multiple token standards, provides + a full-featured API, and offers real-time transaction tracking. + + + Blockscout has been the primary explorer for Gnosis Chain since network inception. + With the completed Gnosis/xDai merger, the responsibility to pay for hosting, maintenance, + and updates for Blockscout should shift to the GnosisDAO. + + + Project Details + + + Goal + + + The goal of this proposal is to provide continued hosting and maintenance for both + the Gnosis Chain and Optimism on Gnosis Chain Blockscout instances. + + + Project Deliverables + + + Maintain Blockscout instances for Gnosis Chain and Optimism on Gnosis Chain Network + on Blockscout’s premises + + Hosting services for the Gnosis Chain and Optimism on Gnosis Chain (for a period + of 1 year with an option to extend) + + Hosting at blockscout.com (for a period of 1 year with an option to extend) + + Premium feature set that includes Advanced smart contract verification, Watchlist, + Private address and transaction tags, Public tags, API key managements, custom ABI, + and future upcoming enhancements. + + Update Blockscout urls to remove xdai, add gnosischain + + Priority support and updates + + Support for end-users of the explorer managed via Discord + + + Execution Timeline + + + Start time + + + Blockscout hosting will no longer be subsidized as of July 17, 2022. If this proposal + passes, hosting and maintenance services will continue uninterrupted beginning on + July 18, 2022 for Gnosis Chain and Optimism on Gnosis Chain instances. If not renewed, + the hosting for the Gnosis Chain and Optimism on Gnosis Chain instances will expire + on July 18, 2022. + + + The length of the contract is for 1 year and can be renewed annually. A new proposal + will be initiated to renew the instance in June 2023. + + + Funding & Disbursement + + + Hosting costs cover high-capacity bandwidth, infrastructure upgrades, and data storage + (1900GiB and growing) for the networks. Feature enhancements and priority support + are also included as a part of the package. + + + Amount is paid up front for the year and can be renewed annually. Payment can be + made to BlockScout’s Gitcoin 0xAddress (0x242ba6d68FfEb4a098B591B32d370F973FF882B7) + with xDai, USDC, or USDT. + + + Gnosis Chain: $100,000 annually ($8,333 per month). + + Optimism on Gnosis Chain: $50,000 annually ($4,166 per month). + + Total cost: $150,000.00 due July 17, 2022 + + + Future Plans​ + + + The following features are actively in progress. + + + UI design refresh + + New modules: NFT explorer, dApp Marketplace, Blockscout RPC + + Transaction actions, protocols-specific customizations + + ENS support + + Analytics dashboard + + More developer tools + + Search enhancements + + Data sorting/filtering + + Data storage optimization + + Data indexing performance enhancements + + Deployment improvements' +start: 1656783460 +end: 1657388260 +state: closed +author: '0x7D7DcEf3bB919347F5031127799ee2679A9111A0' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 157029.3928734823 +scores: + - 157026.75145174866 + - 2.5944363978997576 + - 0.04698533577303192 +votes: 563 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-55.yml b/public/GIPs/GIP-55.yml new file mode 100644 index 00000000..7af9ce33 --- /dev/null +++ b/public/GIPs/GIP-55.yml @@ -0,0 +1,44 @@ +id: '0xf747a5ba90329f9ea406d2f8ba96c28ea4aef091c524a1f3e1f70ab91e8f2524' +gip_number: '55' +url: https://snapshot.org/#/gnosis.eth/proposal/0xf747a5ba90329f9ea406d2f8ba96c28ea4aef091c524a1f3e1f70ab91e8f2524 +title: Should GnosisDAO fund Dark Forest DAO for Arena game mode on Gnosis Optimism? +body: 'Dark Forest DAO (dfdao) is a team of developers and players that have been + building on top of Dark Forest, an open-source, web3 game. + + + We reached an agreement with the former xDAI team in mid-April to fund four months + of development (April - July) to build a new game mode of Dark Forest on Gnosis + Optimism. + + + The payment was in two phases: Phase 1 was the development of the new game mode. + Phase 2 is hosting competitions and stress testing Gnosis Optimism. + + + The xDAI team paid us for Phase 1, but disbanded as part of the Gnosis merger before + paying us for Phase 2. This proposal is to request payment of $159,000 from GnosisDAO + for Phase 2 of our work, due to the xDAI / Gnosis merger. + + + Please reference the GIP-55 post on the Gnosis Forum for more information.' +start: 1657734954 +end: 1658339754 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 96576.04420234423 +scores: + - 96408.28356832832 + - 160.7384050619838 + - 7.022228953889795 +votes: 757 +quorum: 0 +funding: + amount: 159,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-56.yml b/public/GIPs/GIP-56.yml new file mode 100644 index 00000000..67fb832c --- /dev/null +++ b/public/GIPs/GIP-56.yml @@ -0,0 +1,93 @@ +id: gip-56-should-gnosisdao-fund-student-web3-education +gip_number: 56 +url: https://forum.gnosis.io/t/gip-56-should-gnosisdao-fund-student-web3-education +title: Should GnosisDAO fund student web3 education? +body: "## Simple Summary\n\nKairos is a platform that provides an education for students\ + \ to learn through certifications about the different aspects of the ecosystem FOR\ + \ FREE. \nThere is no free education for students in the ecosystem yet, which should\ + \ be a priority to work towards innovation and adoption.\n\nEach blockchain or protocol\ + \ provides education and ressources from three angles: the programming language\ + \ of their company, a presentation of the ecosystem and how it works, and a training\ + \ on the company’s marketing & entrepreneurship model.\n\nWe already have a student\ + \ network gathered with over 3 000 students from universities such as Cambridge,\ + \ Stanford, Dauphine and more. \nWe are always growing our network so if you are\ + \ a student interested to learn about the ecosystem please reach out to [contact@kairostudents.com](mailto:contact@kairostudents.com)\n\ + \n## Abstract\n\nIn the ecosystem, it is challenging for companies to find competent\ + \ and committed individuals to build and contribute to projects. \nThe Kairos team\ + \ has spoken with several blockchain companies who have stated that they find suitable\ + \ profiles for hire only months later, if ever. \nThis comes from the lack of democratization\ + \ of blockchain and mainly the lack of education of the new generation on the topic,\ + \ only 2% of the top universities offer courses on blockchain and they are rarely\ + \ in-depth.\n\nIn parallel, the cheapest price on the market for a student to learn\ + \ about blockchain is $4,000. This price is unacceptable for students who have to\ + \ deal with a heavy workload in addition to their studies. \nBesides, the courses\ + \ are often unorganized and focused on the general and never go into the specific.\n\ + \n## Motivation\n\nThis is where Kairos comes in, working with key players of the\ + \ ecosystem to provide a free education. \nMany investors are leaving the market\ + \ due to current condition but many students are seeing this as an opportunity to\ + \ learn and build. \nBut where do you begin with no knowledge? In this crypted\ + \ ecosystem in which everything changes quickly through constant innovation, it’s\ + \ hard to keep track. \nI have asked myself the same question 4 years ago when\ + \ no ressources existed and I have worked towards blockchain adoption and education\ + \ ever since.\n\nKairos is also an opportunity to see beyond developers education.\ + \ It is included in the three key topics but our team wanted to show that there\ + \ is more to building than code and that you don’t need a dev background to become\ + \ a key player of this ecosystem. \nTherefore, we have decided to add courses and\ + \ certifications about the ecosystem (How is Gnosis different from the other solutions?\ + \ What are the main protocols built on Gnosis and how can you use them? How does\ + \ governance operate on Gnosis) and marketing on that blockchain (Where can you\ + \ find metrics about Gnosis ? What does it say about user behaviour? What are the\ + \ leading projects and how do they operate? What is amount of $GNO stacked and what\ + \ does it say about trust in Gnosis?).\n\n## Specification\n\n * Each student\ + \ will have to verify their student status by validating an email received on their\ + \ university email account. They will then have access to a functional site containing\ + \ the courses provided by the various partner organizations. These courses will\ + \ be classified following several parameters such as their difficulty, the level\ + \ required to pass them, the subject matter (development, marketing, project management,\ + \ etc.). \nStudents will then have to register to the different programs offered\ + \ in order to follow their progress and know the attendance of each program.\n\n\ + \ * Once finished, students will have to provide **a project** proving their mastery\ + \ of the subject in order to obtain their certifications in the form of an NFT or\ + \ a document. \nThe first 50 students will receive tokens of the partners sent\ + \ by Kairos. \nThe most innovative projects will be eligible for funding and support\ + \ from Kairos and its partners, in order to provide maximum assistance and support\ + \ to the brightest minds.\n\n * Our student network is organized as a **DAO** ,\ + \ international, constantly growing and waiting for your courses and certifications.\ + \ The DAO will allow students to choose how treasury is used, which topics to prioritize\ + \ and which topics will get funding.\n\n * GnosisDAO will provide $20,000.00 xDAI\ + \ to Kairos, in exchange for making courses and certifications about Gnosis for\ + \ students.\n\n * This grant is needed to remain the spirit of Kairos being free\ + \ for students and will be used for using the current ressources to make videos,\ + \ courses and quizzes about Gnosis.\n\n * The distribution is 50% of the budget\ + \ being used for the courses and the platform, 25% of the grant to grow our student\ + \ network and communicate about the partnership, 15% to support students projects\ + \ and 10% for the team.\n\n * We will bring visibility to Gnosis and enhance their\ + \ support to education on our platform, on socials and on our student network.\n\ + \n\n\n\n## Rationale\n\nWe are students ourselves, hence the initiative of providing\ + \ a free education for students. \nWorking with Gnosis will allow student education\ + \ about the ecosystem and certified students to build on Gnosis. \nThis is a win-win\ + \ opportunity, let’s support student education and the next generation!\n\nFor more\ + \ information about Kairos : [DocSend](https://docsend.com/view/bfmi894wjunie675)\n\ + \n2 Likes\n" +start: 1656529249 +end: null +state: + - phase-2 +author: Louis +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-57.yml b/public/GIPs/GIP-57.yml new file mode 100644 index 00000000..bcf085bc --- /dev/null +++ b/public/GIPs/GIP-57.yml @@ -0,0 +1,151 @@ +id: '0x7575919c07e03bbe642b11938501bb6cbc542337f64763f94a00e04ed403cfba' +gip_number: '57' +url: https://snapshot.org/#/gnosis.eth/proposal/0x7575919c07e03bbe642b11938501bb6cbc542337f64763f94a00e04ed403cfba +title: Should Gnosis DAO support research of a zkSNARK-enabled light client and bridge? +body: "## Simple Summary\n\nThe current Gnosis bridge is a based on a multi-sig design.\ + \ However, multi-sig bridges have known weaknesses, particularly their reliance\ + \ on a relatively centralized set of operators--see the recent [Ronin bridge](https://cointelegraph.com/news/axie-infinity-s-ronin-bridge-hacked-for-over-600m)\ + \ and [Harmony bridge](https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/)\ + \ hacks, in which hundreds of millions of dollars of funds were stolen by attackers\ + \ who gained access to multi-sig keys. SNARK-enabled bridges--sometimes called [\"\ + trustless\" bridges](https://ethereum.org/en/bridges/)--potentially have better\ + \ security properties. We propose to build prototypes of essential infrastructure\ + \ for a potential SNARK-enabled bridge for Gnosis to Eth2 bridging.\n\n\n## Abstract\n\ + \n- Build essential infrastructure that can be used in the future to create and\ + \ productionize a SNARK-enabled bridge for Gnosis Chain / Eth2. Note that it is\ + \ **not** in the scope of this specific grant to take the bridge all the way to\ + \ production on mainnet—this work will allow us to assess the viability of a production\ + \ bridge and build out the key infrastructure. Productionization, if it happens,\ + \ would be a future project.\n- Create a foundation for Gnosis’ ZK roadmap and expertise.\n\ + \n## Motivation\nTo build the components of a SNARK-enabled bridge for Gnosis Chain,\ + \ an Eth2 compatible light client must be implemented on the EVM. Because the EVM\ + \ does not have precompiles for the BLS12-381 curve used in Eth2, implementing this\ + \ directly in Solidity would result in impractically high gas costs. As a result,\ + \ this approach to bridging was unexplored until it was made practical by recent\ + \ advances in zero-knowledge proofs.\n\nThe 0xPARC community has developed extensive\ + \ expertise in ZK-SNARKs broadly and has built several advanced ZK circuit primitives\ + \ which can now enable these types of applications. We believe that we can design\ + \ a circuit which significantly reduces the gas cost of running a light client\ + \ on EVM by moving the verification of the aggregated BLS signature and the Merkle\ + \ tree inclusion proof off-chain.\n\n## Specification\n\nBuilding this SNARK-enabled\ + \ bridge will require three important components:\n\n1) A Solidity smart contract\ + \ which implements the [Eth2 light client spec](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/sync-protocol.md).\ + \ \n2) A zkSNARK circuit that verifies the aggregated BLS signature of the [sync\ + \ committee](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md#sync-committee),\ + \ verifies the Merkle tree inclusion proofs with SSZ for serializiation, and verifies\ + \ the current sync committee from the previous block header.\n3) An operator node\ + \ implementation which can keep the light client up to date.\n\n\n## Rationale\n\ + \n### SNARK-enabled Bridge Pros & Cons\n\nPros:\n\n- Security: SNARK-enabled bridges\ + \ can be safer than centrally-operated multisig bridges. Funds cannot be unilaterally\ + \ stolen by a small set of coordinated operators or hackers by obtaining a known\ + \ set of private keys (see the $500mm [Ronin bridge hack](https://cointelegraph.com/news/axie-infinity-s-ronin-bridge-hacked-for-over-600m)\ + \ and the $100mm [Harmony bridge hack](https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/)).\ + \ Instead, the security of a SNARK-enabled bridge relies on the honesty of a larger\ + \ and regularly-shuffled sync committee as defined in the eth2 light client spec.\n\ + \nCons:\n\n- Operating expense: Our estimates suggest it will cost ~0.008 ETH per\ + \ light client header update at 40 gwei gas price as well as ~0.008 ETH per withdraw\ + \ operation on the bridge. The frequency of light client updates is up to the operator.\ + \ In the most extreme case, updating the light client every 10 minutes for a year\ + \ would cost ~420 ETH. Updating every two hours would cost ~35 ETH.\n\nAdditionally,\ + \ regardless of what cryptographic mechanisms are used, bridges cannot provide security\ + \ beyond the consensus mechanisms of the source and target chains. Even with the\ + \ efficiencies provided by zkSNARKs, such limitations will be governed by the size\ + \ of potential PoS penalties on either chain.\n\n## Implementation\n\n### Work Breakdown\n\ + \n**Timeline:** 10 weeks (July 4 - September 9) for Phase 1 and Phase 2\n\n**Phase\ + \ 1:** \n\nThe goal of Phase 1 will be to deliver prototypes of the three important\ + \ components above. In particular, we will deliver a smart contract that implements\ + \ the Eth2 light client spec with as much computation as possible moved off-chain\ + \ with a zkSNARK circuit to make gas costs feasible.\n\nThe SNARK circuit will do\ + \ three things:\n\n- verify the BLS signatures of the sync committee\n- verify the\ + \ Merkle tree inclusion proofs using SSZ for serialization used in several places\ + \ in the light client\n- verify the current sync committee from the previous block\ + \ header\n\nThe Solidity smart contract will generally implement the Eth2 light\ + \ client spec substituting out the BLS signature verification and Merkle tree inclusion\ + \ proofs with a snark verification, reducing gas costs.\n\nWe will also provide\ + \ an operator node implementation which periodically updates the light client with\ + \ the proof generated by the SNARK circuit.\n\n**Phase 2**\n\nIn Phase 2 of the\ + \ of the grant, we aim to have public-facing polished artifacts and deliverables\ + \ including the smart contracts and circuits from Phase 1. The artifacts include\ + \ the following:\n\n- public open-source repo with smart contract light client and\ + \ SNARK circuits with clear documentation\n- ZK light client deployed to testnets\ + \ (Ethereum and Gnosis Chain) with a prototype operator that generates proofs and\ + \ pings contracts with block headers every 10 minutes\n- public open-source repo\ + \ with a prototype bridge contract that calls the light client smart contract and\ + \ a prototype UI that allows for use generating inclusion proofs and bridging funds\n\ + - prototype bridge contract deployed to test nets and example of SNARK-enabled bridging\ + \ on testnets\n- public blog post explaining what we built: the technical architecture\ + \ of a SNARK-enabled bridge, high-level technical explanation of circuits and how\ + \ all the components fit together, and a precise breakdown of both security guarantees\ + \ as well as risks/limitations/failure modes of a SNARK-enabled bridge.\n- stretch:\ + \ blog post series diving deeper into technical details of each component\n\n##\ + \ Deliverables\n\n### Grant Allocation\n\nThe core team that would recieve this\ + \ grant is part of the 0xPARC organization. 0xPARC is trying out a unique, experimental\ + \ public-goods collective grant sharing proposal for this project. In particular,\ + \ the proceeds from this grant will be split **50/50** between the core team and\ + \ donations to various dependencies the project relies on (i.e. open source circuits,\ + \ public goods resources) as well as the 0xPARC community. \n\nThe reason for this\ + \ split is this project is only made possible by extensive open-source work by co-dependencies\ + \ in the 0xPARC and broader ZK communities (such as circom, made by iden3).\n\n\ + This innovative model for grant-funding and support for public goods will also be\ + \ mentioned in the blog post, as we want this project to push the narrative from\ + \ both a technical standpoint as well as a community & grant-funding standpoint.\n\ + \n**We are requesting a total of $600k (600k USDC) across two project phases: $300k\ + \ will go to the team and $300k will go to the broader ZK community and public goods\ + \ (distribution determined by core team).** We expect that the project will take\ + \ around 30 engineering weeks for the core team, in addition to supporting work\ + \ from various dependencies and public goods that make this project possible. As\ + \ described above, half of the grant will be distributed by the core team to the\ + \ broader ZK community and various co-dependencies (which may include prior work\ + \ by team members, as well as future ZK projects that opt into 50/50). Note that\ + \ the core team, not GnosisDAO, will be deciding on the distribution of the $300k\ + \ set aside for broader ZK community and public good contributions.\n\n**Phase 1:\ + \ $120K for Team + $180K Public Goods/0xPARC ZK Ecosystem**\n\nThe funding for this\ + \ phase will be paid out in advance of work starting on Phase 1. The deliverables\ + \ for this phase include the following:\n\n- [ ] ZK circuit template for BLS signature\ + \ aggregation and verification\n- [ ] ZK circuit template for SSZ Merkle tree inclusion\ + \ proofs\n- [ ] ZK circuit for verifying the sync committee form the previous block\ + \ header\n- [ ] Solidity smart contract for running the light client according to\ + \ the Eth2 spec on EVM\n- [ ] an operator node implementation which periodically\ + \ submits new headers and proofs of the ZK circuit to the light client\n\n**Phase\ + \ 2: $180K for Team + $120K Public Goods/0xPARC ZK Ecosystem**\n\nThe funding for\ + \ this phase will be paid out after the completion of Phase 1 (as judged by Stefan\ + \ and Martin of Gnosis) and before starting of Phase 2. The deliverables of this\ + \ phase include the following: \n\n- [ ] extensive documentation of all circuits,\ + \ contracts, and code\n- [ ] ZK light client deployed to test nets on Ethereum and\ + \ Gnosis Chain with a prototype operator that generates proofs and pings contracts\ + \ with block headers periodically\n- [ ] prototype bridge contract + UI that can\ + \ bridge assets from Gnosis Chain to Ethereum\n- [ ] blog post explaining what we\ + \ built ranging from the technical architecture of a SNARK-enabled bridge and how\ + \ all the components fit together\n\nThe address of the SAFE to provide funds to\ + \ is: 0xFeB39382FCBE6035e0bE2263Ba474390AB926eE4\nhttps://gnosis-safe.io/app/eth:0xFeB39382FCBE6035e0bE2263Ba474390AB926eE4/home\n\ + \n## Team\n\n\n- Uma Roy\n - Summer resident at 0xPARC. Co-author of ZK-identity\ + \ apps [zkmessage.xyz](http://zkmessage.xyz) and [cabal.xyz](http://cabal.xyz).\ + \ Co-author of circom-batch-ecdsa.\n- John Guibas\n - Summer resident at 0xPARC.\ + \ Co-author of circom-batch-ecdsa and has experience building smart contracts for\ + \ DeFi and infrastructure for blockchain analytics.\n- Jonathan Wang\n - 0xPARC\ + \ grantee and co-author of circom-pairing. Number theory post-doc and elliptic curve\ + \ math specialist.\n\nAdditional 0xPARC community members will be helping out with\ + \ implementation. This includes individuals that helped implement many of the most\ + \ advanced circuit primitives in groth16, including co-authoring of circom-bigint,\ + \ circom-ecdsa, and circom-pairing.\n" +start: 1657075047 +end: 1657679847 +state: closed +author: '0xd60D3ff36e52cFD04B9f29e10D5A43f9FaB1F256' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 205784.74910019594 +scores: + - 205548.46288814992 + - 0.003658774799350572 + - 236.28255327122884 +votes: 550 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-58.yml b/public/GIPs/GIP-58.yml new file mode 100644 index 00000000..8ea95fc5 --- /dev/null +++ b/public/GIPs/GIP-58.yml @@ -0,0 +1,46 @@ +id: '0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8' +gip_number: '58' +url: https://snapshot.org/#/gnosis.eth/proposal/0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8 +title: Karpatkey DAO Service Extension +body: 'Should GnosisDAO implement GIP-58, as detailed in the following forum post?: + https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417 + + + + After the GIP-20 6 approval, the development and sustainable growth of the Gnosis + Chain became a top priority for GnosisDAO. Even though efficient treasury management + is still a must for GnosisDAO’s evolution, the scope of our work has to encompass + more in order to take the Gnosis Chain to the next level, co-creating a safe, trustworthy + ecosystem. + + + We increased our headcount and went beyond the scope of GIP-20 to be able to adequately + cater to Gnosis’ current needs. + + + This proposal focuses on the Gnosis Chain and treasury development, seeking to reduce + risk exposure, develop anti-liquidation bots to increase capital efficiency, update + our security protocol, run security audits, further improve our reporting, execute + and manage a sustainable rewards plan for new and existing protocols in the GC, + and scout attractive new ones to make them part of the GC.' +start: 1657726231 +end: 1658331031 +state: closed +author: '0x46f6B1D519a5bDaf10d49e135c9F611c9bd126e9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 84311.0738698482 +scores: + - 79977.2606628623 + - 4312.6163162912835 + - 21.196890694632515 +votes: 718 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-59.yml b/public/GIPs/GIP-59.yml new file mode 100644 index 00000000..0119d026 --- /dev/null +++ b/public/GIPs/GIP-59.yml @@ -0,0 +1,180 @@ +id: gip-59-should-gnosisdao-fund-circles-ubi-r-d-work +gip_number: 59 +url: https://forum.gnosis.io/t/gip-59-should-gnosisdao-fund-circles-ubi-r-d-work +title: Should GnosisDAO fund Circles UBI R&D work? +body: "### Simple Summary\n\nThis proposal would fund the [Circles Coop eG](http://circles.coop)\ + \ and the[ Bitsposessed](https://join.bitspossessed.org/) developer collective to\ + \ support the CirclesUBI team’s R&D costs for one and a half years and expand operations.\ + \ The following Circles UBI proposal would foster the mass adoption of key Gnosis\ + \ technologies like the Gnosis Safe via the establishment of UBI Open Pilots as\ + \ well as fostering internal collaboration between GnosisChain dapps through the\ + \ development of a Circles Web of Trust (WoT) GnosisSafe native app and other tools\ + \ at a total of USD - $3.571 Million, paid 45% in GNO and 55% in DAI, administered\ + \ by the Circles Coop eG.\n\n### Abstract\n\nWith over 120,000 accounts deployed\ + \ so far via the circles.garden interface, [CirclesUBI](http://joincircles.net)\ + \ has established itself as a power dapp within GnosisChain, developing, maintaining\ + \ and promoting basic income public good infrastructures built within programmable\ + \ accounts via Gnosis Safe technology. The present proposal seeks funding for the\ + \ team’s operations plus a UBI Open pilot funding program for 1.5 years, and includes\ + \ a detailed budget on how the team plans to allocate the requested funds of USD\ + \ - $ 3.571 Million equivalent. Through funding the present proposal, GnosisDAO\ + \ would establish clear alignment with its core values of funding public goods and\ + \ support the development and improvement of infrastructure critical to ensuring\ + \ the sustainable scalability of the GnosisDAO and GnosisChain ecosystem.\n\nSee\ + \ Phase 1 [here](https://forum.gnosis.io/t/should-gnosisdao-fund-circles-ubi-r-d-work-a-web-of-trust-dapp-for-gnosis-safe-ubi-as-public-goods/4936).\n\ + \n### Motivation\n\nCirclesUBI is a basic income system for communities built on\ + \ the GnosisChain. CirclesUBI was coined first by Martin Koeppelmann during the\ + \ early days of Ethereum, merging ancient traditions of mutual credit with the idea\ + \ of Unconditional Basic Income (UBI) into [a system of personal currencies](https://handbook.joincircles.net/docs/developers/whitepaper/).\ + \ Since CirclesUBI launched in Berlin in October 2020 it has gained significant\ + \ attention from individuals and communities world-wide, with over 120,000 successfully\ + \ deployed GnosisSafes to date. Beyond the ongoing [Berlin Open Pilot](https://joincircles.net/business/)\ + \ and the communities who use Circles around the world, there are new instances\ + \ of the application being developed around the world, including a campaign by Expedition\ + \ Grundeinkommen in Berlin that started from May 2022 (circles.pink). This proposal\ + \ will support the development of a world-wide Circles Movement DAO to serve these\ + \ as well as other emerging communities.\n\nTo ensure our mission to make Circles\ + \ a planetary movement towards bringing UBI into the world, the Circles Coop and\ + \ the Bitspossessed collective have successfully relaunched Circles in order to\ + \ have an issuance rate based on time so that communities world-wide can more easily\ + \ anchor Circles to their own Units of Account and start exchanging using CRC. You\ + \ can read more about the recent transition and its benefits [here](https://circlesubi.medium.com/the-revaluation-of-the-circles-system-c6eea70e767d?source=user_profile---------2----------------------------).\n\ + \nWith the goal to further increase uptake, Circles Coop and Bitspossessed are now\ + \ focused on creating a resilient payments infrastructure without single points\ + \ of failure (SPOFs). Based on the online [Circles Market](http://market.joincircles.net),\ + \ the team is currently designing the specification to develop an OpenAPI so that\ + \ people across the planet can use their existing preferred payment methods to co-pay\ + \ with their CRC currency.\n\nAfter the successful [merge of XDAI/Gnosis](https://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904),\ + \ we believe it’s time to deliver on the promises of “developing the Gnosis Chain\ + \ ecosystem and incentivize usage”. In order to have a more resilient and interdependent\ + \ ecosystem, the CirclesUBI team wants to bring mutual benefit to the different\ + \ dapps within GnosisChain via the development of a [Circles Web of Trust ](https://protocol.bgnm.de/essays/sarah-friend/)(WoT)\ + \ dapp within GnosisSafe. A native WoT GnosisSafe app would provide pathways for\ + \ interoperability and integration between dapps, DAOs, GnosisChain POS validators,\ + \ other WoT networks like [Proof of Humanity](https://www.proofofhumanity.id/),\ + \ [BrightID](https://www.brightid.org/) and more, embedding trusted relationships\ + \ and token systems within a modular and integrative WoT for GnosisChain.\n\nCircles\ + \ UBI Coop approaches its mid-term development through establishing revenue-generating\ + \ income sources to cover cost of production and re-invest the overflow into R&D.\ + \ The CirclesUBI team will develop a Community Currency Exchange, a social DEX that\ + \ promotes community finance (Co-Fi) via CRC group currencies and other alt-coins\ + \ like our sister project [Trustlines](https://trustlines.network/) (recently [decided](https://snapshot.org/#/gnosis.eth/proposal/0x13f2908cc42a1d21872ff284b1f71bedd452781c3daf124221e67b13511e6bd1)\ + \ to move to GnosisChain), where SMEs and COOPs and municipalities can issue their\ + \ own community currencies and sell it for digital assets and DAI stablecoin in\ + \ return for future promises to their own production, creating healthier relationships\ + \ between investors within the Gnosis ecosystem and community/business members in\ + \ the Circles network, new DAO structures and more. The Gnosis ecosystem can further\ + \ benefit from the uptake of GnosisSafe infrastructure via CirclesUBI to non-crypto\ + \ natives, with over 120,000 safes deployed as of mid-2022 on Gnosis Chain (source:\ + \ [Dune Analytics](https://dune.com/tschubotz/Gnosis-Chain-Gnosis-Safe-Circles)).\n\ + \nIn short, the Circles Coop & the Bitspossessed have assembled an extremely well\ + \ positioned team to stress-test, develop, maintain and expand underlying Gnosis\ + \ core infrastructure and drive Gnosis technologies to mass adoption via the implementation\ + \ of UBI on a planetary scale, which we believe to be a paradigm shift in how society\ + \ is organised. Gnosis currently provides the backbone infrastructure for this transition\ + \ to take place and our mission is to improve it through everyday usage with a wide\ + \ range of people.\n\n### Specification\n\nThe Circles Coop and the Bitspossessed\ + \ collective seek to increase the size of the teams to a total of 24 full-time positions,\ + \ which will be employed over the course of 12 - 18 months, in order to develop,\ + \ maintain and expand the described tools. Furthermore, the proposal includes funding\ + \ for a Circles international ambassador position leading the community work within\ + \ the Circles Movement DAO and transferring the Circles Coop’s Berlin pilot learnings,\ + \ best-practices and research tools to better implement other Circles hubs around\ + \ the world.\n\nThe total budget requested for the CirclesUBI team (USD - $ 1.948\ + \ Million in DAI, 55 %) and to equip the Circles Movement DAO via the development\ + \ of Open UBI Pilots (USD - $ 1.5 Million in GNO, 45 %) is USD - $ 3.571 Million.\ + \ The full budget details of the present CirclesUBI proposal can be found [here](https://docs.google.com/spreadsheets/d/1ORy9d2pw7IJoub05s5MuVLBD3kRyUqpQmJnMG1KhdR4/edit#gid=156254642).\n\ + \n### Rationale\n\nThe [CirclesUBI technical roadmap](https://nubo.bitspossessed.org/s/jYMDYoA6ecZNFXw)\ + \ is public and was created by the [Bitspossessed](https://join.bitspossessed.org/),\ + \ the team that maintains and develops the CirclesUBI core codebase. Its chief priorities\ + \ for 2022 include improvements to the pathfinder algorithm, including hardening\ + \ transfer through transactions to improve the overall functionality and usability\ + \ of the Circles network, as well as developing a Circles Payment API & co-payment\ + \ functionality. For Q4 2022 and 2023, priorities lay on developing a general purpose\ + \ GnosisSafe Web of Trust (WoT) native app and tooling based on the Circles WoT\ + \ to encourage more on-chain collaboration and a Community Currency DEX. All of\ + \ this is to ensure that the already existing living communities using Circles can\ + \ have a better user-experience. In terms of promises to the GnosisDAO, we divide\ + \ these into two:\n\n#### 1\\. Development of Gnosis Infrastructure & Public Goods:\n\ + \n * Development of a GnosisSafe Web of Trust (WoT) native dapp & modular tooling\ + \ for the GnosisChain ecosystem: The Circles WoT provides a network of trusted peers\ + \ which can be used by different projects building on GnosisChain so that other\ + \ dapps can build on top of it using their own token network or connecting it with\ + \ other WoT networks (e.g. BrightID, Proof of Humanity, etc) and established more\ + \ aligned strategic pathways for collaboration. R&D will take place in the following\ + \ areas:\n\n * Robust network reputation system for staking on GnosisChain via\ + \ the future Gnosis WoT & R&D on scaling GnosisChain through the Circles WoT and\ + \ projects like Dappnode.\n * Trust relations between and within DAOs using GnosisSafes.\n\ + \ * Modular collaboration and integration between dapps in the GnosisChain ecosystem.\ + \ Think Proof of Humanity, Trustlines, BrightID, Circles and many more!\n * Embed\ + \ real time economic trade data onto the blockchain to support the development of\ + \ more transparent, sustainable and trusted supply chains via the UBI pilots research.\n\ + \ * Pathfinder algorithm R&D - useful for other projects with native tokens to\ + \ do their own transactions using an integrated WoT dapp.\n * Modular extensibility\ + \ of the transfer through methods.\n * More non-market driven transactions, such\ + \ as recent Proof of Active Participation (POAP) efforts. * R&D into a future $WOT\ + \ token for the Web of Trust dapp for GNO token holders, similar to the $SAFE token\ + \ proposal.\n * CirclesUBI Open Pilots: Leveraging Gnosis technology, the CirclesUBI\ + \ Open Pilots provide a strategic framework to go from basic income pilots to basic\ + \ income policy and basic income systems around the planet. The Circles Coop is\ + \ currently expanding the Berlin Open Pilot and plan to spread CirclesUBI more formally\ + \ into other regions as part of a Circles Movement, planning to expand the support\ + \ for open pilots by the end of 2023, where the [joincircles.net](http://joincircles.net)\ + \ will become a neutral platform for all projects using Circles and other wallet\ + \ instances, such as circles.pink (Expedition Grundeinkommen). The Circles Movement\ + \ DAO will work as a governance mechanism to allocate funds accordingly for the\ + \ implementation of these pilots to the communities that want to implement Circles\ + \ locally in a transparent way. Our go-to-market strategy is working with the B2B\ + \ sectors to increase productive capacity, develop infrastructure and go to key\ + \ stakeholders, such as established communities already using CRC, local municipalities\ + \ and regional governments interested in implementing basic income, in order to\ + \ create more ecological and transparent value chains. UBI is one of the main pillars\ + \ for the 21st century economy and a social ecologically just transition, especially\ + \ given the current context of supply chain disruptions and rising inflation. We\ + \ strongly believe GnosisChain and Gnosis technologies more generally provide a\ + \ strategic backbone for this transition to take place.\n\n * Circles Payment API:\ + \ In order to have a scalable system and reach millions of people, we are focusing\ + \ on creating an open source payment API so that Circles can be used in a plug and\ + \ play basis, allowing people to co-pay with their UBI using existing payment infrastructures\ + \ and habits, such as debit cards, marketplaces and other payment applications.\n\ + \n\n\n\n#### 2, Fulfilling the Promise of Investment Opportunities to GNO holders\n\ + \n * Community Currency DEX: Based on Circles group currencies (currently being\ + \ developed by third party teams), a social DEX will create incentives for GNO holders\ + \ via investment opportunities in strategic future tokens emerging from the development\ + \ and deployment of the platform, as well as ROI from overflow investments in SMEs\ + \ and COOPs who sell their tokens to the communities that support them, liquidity-pool\ + \ provider incentives and more. To achieve this, we are exploring collaboration\ + \ with MakerDAO for integrations and researching deployment of e.g. the Juicebox\ + \ protocol on the GnosisChain. We are open for suggestions and potential synergies\ + \ to collaborate with existing DEX infrastructures (e.g. Honeyswap, 1hive, Uniswap,\ + \ Cowswap) within GnosisChain to design a specific-purpose social DEX that is directed\ + \ at the real economy.\n * Indirect benefits for GNO holders: Due to further increasing\ + \ uptake of GnosisSafes and transactions being incentivized by Circles communities,\ + \ the revenue model of GnosisChain (e.g. transaction fees, staking rewards, etc.)\ + \ will in turn benefit all GNO token holders and those participating in the maintenance\ + \ and improvement of Gnosis Chain. We also expect benefits coming from Web of Trust\ + \ R&D.\n\n\n\nAll funds not spent will be at Circles Coop e.G. discretion.\n\nUnconditionally,\n\ + \nJulio Linares, \non behalf of the Circles UBI Coop & Bitspossessed Collective\n\ + \n14 Likes\n\n**[next page →](/t/gip-59-should-gnosisdao-fund-circles-ubi-r-d-work/5475?page=2)**\n" +start: 1657483876 +end: null +state: + - phase-2 +author: null +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 3.571 Million + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-6.yml b/public/GIPs/GIP-6.yml new file mode 100644 index 00000000..599f9c11 --- /dev/null +++ b/public/GIPs/GIP-6.yml @@ -0,0 +1,104 @@ +id: gip-6-deploy-gnosis-auction +gip_number: 6 +url: https://forum.gnosis.io/t/gip-6-deploy-gnosis-auction +title: Deploy Gnosis Auction +body: "## Update (19/02/2021)\n\nAccording to [GnosisDAO’s governance process](https://forum.gnosis.io/t/readme-gnosisdao-governance-process/736)\ + \ I promote this proposal to the consensus phase (Phase 3). \nVoting is available\ + \ [here](https://snapshot.page/#/gnosis/proposal/QmUA5aYzD7nRdPQhqMTH3GWus4Bj62SGcSfjPEb6QcDdnM)\ + \ \nA link to the audit report for Gnosis Auction smart contracts was added to\ + \ the Implementation section of this proposal.\n\n## Simple Summary\n\nThis GIP\ + \ intends to answer the question: Should GnosisDAO deploy GnosisAuction?\n\n## \ + \ Abstract\n\nThis is the phase-II continuation to [Should GnosisDAO build an IDO\ + \ specific Dapp?](https://forum.gnosis.io/t/should-gnosisdao-build-an-ido-specific-dapp/895)\n\ + \nGnosisAuction would build on the proven success with token sales that Gnosis Protocol\ + \ (GP) v1 (Mesa) had. It will provide a sturdy mechanism that supports fair price\ + \ finding in token sales. It will also aim to be modular enough to work in other\ + \ scenarios where auctions are needed.\n\n## Motivation\n\nGnosis Protocol v1 was\ + \ successful with multiple token sales, including some high profile ones such as\ + \ mStable and API3. Nonetheless, the protocol was not developed with this specific\ + \ use-case in mind. Additionally, after hitting the market, many users suggested\ + \ multiple improvements.\n\nSome of the suggested improvements included:\n\n *\ + \ Making the UX more simple\n * Reducing the number of transactions required to\ + \ trade\n * Improve gas efficiency\n * Reduce attack vectors\n\n\n\nThough these\ + \ improvements are being addressed in the development of Gnosis Protocol v2 (GPv2),\ + \ it still plans to be a DEX that is not aimed at token sales and other kinds of\ + \ auctions. Thus, it is important to address this segment of the market that has\ + \ proven demand.\n\nGnosisAuction still takes some of the most important benefits\ + \ from GPv1, out of which the following two stand out:\n\n * Single closing price\ + \ per auction, which is the fairest price-finding mechanism\n * MEV resistance,\ + \ which prevents miners and frontrunners from extracting value\n\n\n\nFinally, it\ + \ is important to note that there is no general auction smart contract ready to\ + \ use in the market. Some of the use-cases that the contract could also be used\ + \ for include:\n\n * Auctions to repay debt on shortfall events of lending protocols\ + \ like AAVE\n * Liquidations\n * Token buy backs\n * Price discovery for all\ + \ sorts of assets\n\n\n\n## Specification\n\nGnosisAuction may be used as a tool\ + \ by anyone hoping to auction off a predefined amount of tokens. Anyone can bid\ + \ to buy these tokens by placing a buy-order with a specified limit price during\ + \ the whole bidding time, subject to any potential customisations/restrictions placed\ + \ by the auctioneer. At the end of the predefined auction time, the final price\ + \ is calculated by the following method: The buy volumes from the highest bids are\ + \ getting added up until this sum reaches the initial sell volume. The limit price\ + \ of the bid that increases the overall buy volume to the initial sell volume is\ + \ setting the uniform clearing price. All bids with a higher price will be settled\ + \ and traded against the initial sell volume with the clearing price. All bids with\ + \ a lower price will not be considered for the settlement and users will be able\ + \ to withdraw their committed funds.\n\nGnosis auction will initially have a simple\ + \ UI so buyers can place their bids. A draft of the interface can be seen below,\ + \ which will aim to use the gnosis-auction.eth domain.\n\n[![](//forum.gnosis.io/uploads/default/optimized/1X/01ff03ffac18dc194e0aa4a8cfc46f387fa30daa_2_438x325.png)\ + \ 1596×1184 127 KB ](//forum.gnosis.io/uploads/default/original/1X/01ff03ffac18dc194e0aa4a8cfc46f387fa30daa.png)\n\ + \nAt first, auctioneers (sellers) will have to interact directly with the code in\ + \ order to run an auction. Nonetheless, simple, yet comprehensive documentation\ + \ will be written to make this easy for sellers to set up. Subject to legal considerations,\ + \ eventually an auctioneer interface may be built.\n\n## Rationale\n\nAs stated\ + \ above, GnosisAuction is a software tool to cater primarily to those hoping to\ + \ conduct IDOs, which are currently an underserved market. GPv1 was not aimed at\ + \ fulfilling this market, and GPv2 is geared towards being a DEX-aggregator/general\ + \ purpose DEX.\n\nRegarding other models considered, batch auctions were preferred\ + \ over Dutch Auctions mainly because:\n\n * Dutch Auctions have high activity near\ + \ the end, high gas prices or other infrastructure issues could be fatal on a critical\ + \ event as a token sale or shortfall event\n * DutchAuctions calculate their price\ + \ based on blocktime, which makes it hard to predict\n * Dutch Auctions cause a\ + \ gas war near the end of the auction, causing competition based on gas bidding\ + \ instead of the limit price set buy buyers of the auction\n * On Dutch Auctions,\ + \ bidders need to wait until the auction price reaches the maximum amount that they\ + \ are willing to pay, or else they risk paying more than they wanted. With this\ + \ implementation, users can set their limit price (maximum amount they are willing\ + \ to pay) from the start, and never pay more than what they determine.\n\n\n\n##\ + \ Implementation\n\nThe specific information on the contract can be followed up\ + \ in [this repository](https://github.com/gnosis/ido-contracts). \nThe audit report\ + \ can be found [here](https://github.com/gnosis/ido-contracts/blob/main/audit-report.md)\n\ + \n4 Likes\n" +start: 1613053983 +end: null +state: + - closed +author: 'auction_master + + status: Phase 3 + + type: Meta + + created: 2021-02-11 + + + + Update (19/02/2021) + + According to GnosisDAO’s governance process I promote thi…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-60.yml b/public/GIPs/GIP-60.yml new file mode 100644 index 00000000..49dc91b8 --- /dev/null +++ b/public/GIPs/GIP-60.yml @@ -0,0 +1,70 @@ +id: '0xa8adcb035b23a8e3f301ecfc2e87571279691fc28b0661c186ac380e08182b5b' +gip_number: '60' +url: https://snapshot.org/#/gnosis.eth/proposal/0xa8adcb035b23a8e3f301ecfc2e87571279691fc28b0661c186ac380e08182b5b +title: Should Gnosis pilot a DAOcast? +body: "# [Gnosis DAOcast](https://docs.google.com/presentation/d/e/2PACX-1vR2xKzpdKsLaua3ShSSERnAu3a9xqd19oAsl-mGUrn5vDUFah0LNx9kjpeAtaKOZTj0D60Bj-uI8Z2E/pub?start=false&loop=false&delayms=5000)\n\ + ## Proposal Summary\nPilot a weekly live broadcast to communicate the latest developments\ + \ in the Gnosis DAO ecosystem, and provide a new way to grow the community through\ + \ education and fun. \n\n## Background & Motivation\nAll public-facing DAO activities\ + \ and decisions (community calls, AMA’s, forum discussions, snapshot votes, etc.)\ + \ can be harnessed to generate content that amplifies the work of the community,\ + \ and establish a unique narrative. Gnosis DAO is a dynamic project with respected\ + \ status in the industry; a live broadcast designed to cover its activities would\ + \ serve as a marketing resource, increase community engagement, and add a new layer\ + \ of communications transparency.\n\n## Specification \n\nDAOcast Format\n\n* **Episode\ + \ length**: ~1 hour\n\n* **Frequency**: Bi-weekly\n\n* **Pilot Duration:** 16 weeks\ + \ (8 total episodes)\n\n* **Logistics**: Show hosted on Twitter Spaces + audio combined\ + \ with visual overlays via OBS to be run live on YouTube. This format can enable\ + \ Gnosis DAO to grow its audience on two of the most important social media platforms\ + \ in the industry simultaneously. \n\n* **Content options:** We have a variety\ + \ of content ideas for the pilot; there is a lot of room for creativity and we are\ + \ open to suggestions. After feedback from the Gnosis team, we will focus primarily\ + \ on content that helps to highlight the Gnosis Chain ecosystem, while also helping\ + \ to communicate wider developments in the DAO. \n\n* **Post-Show Highlights:**\ + \ Following each program, we will cut at least two (2) highlights from the broadcast.\ + \ At least one (1) of these cuts will be 2m 20s or under for use as twitter native\ + \ video; both cuts will be posted independently on YouTube to create a consistent\ + \ posting cadence required to gain traction with the algorithm.\n\n* **Aesthetic\ + \ Design:** All visuals used on YouTube will be aligned with the branding expectations\ + \ of Gnosis DAO.\n\n## How will we measure success?\nIn order to achieve success,\ + \ alignment with existing Gnosis DAO marketing / communications goals is required.\ + \ Should this initiative take flight, we hope to work closely with relevant teams\ + \ to ensure we are rowing in the same direction. We propose three KPI categories\ + \ for evaluating the pilot ([view table](https://docs.google.com/spreadsheets/d/1uqSBzjHZon8GMZdGUOpqIePNlrsGp8G4VWPHsFghrQA/edit?usp=sharing)),\ + \ and will log data after each show. \n\n\n\n## Why our team?\n\nWe have excellent\ + \ knowledge of the web3 space, context on Gnosis DAO, and the logistical and technical\ + \ expertise required to research, plan, and execute consistent content creation.\ + \ \n\nRelevant work samples with Gnosis Chain:\nPost-produced content\n* [Gnosis\ + \ Chain Defi Ecosystem](https://www.youtube.com/watch?v=yPYYKz0u9K0)\n* [Gnosis\ + \ Chain DAO Tooling + Infrastructure](https://www.youtube.com/watch?v=uAw1paJKcqc)\n\ + \nInterview-style GC Show [live stream + highlights]\n* [GC Show - QiDAO](https://youtu.be/XsP9icavQ44)\ + \ + Highlight [A](https://youtu.be/sMOg2AKGtgA) , [B](https://youtu.be/tXjOd_I6_g8)\n\ + * [GC Show - Twitter Thread w/ XP Network](https://twitter.com/gnosischain/status/1537717038860443648?s=20&t=P0pgmjg5kgREZh3jOxWDDQ)\n\ + \nTeam Members\n\n* @twells - project manager\n* @itsyaboi - video magic\n* @Sapote\ + \ - audio magic\n\n## How much will it cost?\n**Tokens Requested:** 4,000 xDai/USDC\ + \ + ~7.5 GNO (at current market price)\n**Recipient Address::** 0x9638530aA558c81253625d42f3018BC1544D9Dd3\n\ + **Network:** Gnosis Chain\n**Requested Payment Date:** Monthly payment is preferred\ + \ (4 month pilot).\n\n## Conclusion\nWe've had a great experience working with members\ + \ of the Gnosis Chain team, and are enthusiastic about contributing to the larger\ + \ DAO through this new media initiative. Your vote and feedback are greatly appreciated!\n" +start: 1660065149 +end: 1660669949 +state: closed +author: '0x9638530aA558c81253625d42f3018BC1544D9Dd3' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 77049.07591327732 +scores: + - 77038.55151502932 + - 3.422032515669759 + - 7.1023657323537295 +votes: 406 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-61.yml b/public/GIPs/GIP-61.yml new file mode 100644 index 00000000..9fb29b23 --- /dev/null +++ b/public/GIPs/GIP-61.yml @@ -0,0 +1,201 @@ +id: '0x70c0fa32438a38508fa4e011422e8955fad41fc246d569772faaedf9cfbfa876' +gip_number: '61' +url: https://snapshot.org/#/gnosis.eth/proposal/0x70c0fa32438a38508fa4e011422e8955fad41fc246d569772faaedf9cfbfa876 +title: Shall GnosisDAO fund BootNode as a Core Contributor Team? +body: "## Simple Summary\n\nBootNode proposes to contribute engineering and development\ + \ services to the Gnosis DAO ecosystem by building a hands-on autonomous team with\ + \ relevant experience in multiple disciplines that will focus on growing the GC\ + \ ecosystem adoption, starting with the following priorities:\n\n* Further strengthening\ + \ and decentralizing the DAO development by incorporating an additional specialized\ + \ Contributor Team working towards a shared goal.\n* Bridges operation: product\ + \ discovery, development, coordination, and engineering to count with an up-to-date\ + \ and sustainable Bridges operation: present infrastructure and future initiatives.\n\ + * Circles: build the required infrastructure so many teams ideally can bring a wave\ + \ of new users to the gnosis chain.\n* Gnosis Chain decentralization and security:\ + \ running chain, beacon chain, and bridges nodes.\n* Other initiatives the DAO might\ + \ need.\n\nThe team will commit long-term by starting with a 6-month engagement.\n\ + \n## Motivation\n\nSince the early days, many BootNode (BN) team members have contributed\ + \ to the Gnosis ecosystem by being exposed to different projects:\n\n* POA Network:\ + \ creating the required infrastructure used later to build xDAI.\n* Gnosis Chain\ + \ (formerly xDAI): from bootstrapping the network and being core contributors to\ + \ different bridges and dApps, to educating, onboarding new projects, and consulting.\n\ + * Core contributors to the Circles infrastructure.\n* Core contributors to the Gnosis\ + \ Safe (BN became a Safe Guardian) and other projects such as Auctions, COW Protocol,\ + \ Omen, and dxDAO.\n\nWe believe that the Gnosis DAO will benefit from the value\ + \ BootNode can add due to its outstanding team and relevant experience. BootNode\ + \ accelerates the building and growth of protocols, dApps, and networks through\ + \ engineering, development, and governance.\n\nWe are confident we can work productively\ + \ alongside the Gnosis DAO on different projects. We will push growth forward of\ + \ the Circles, the Gnosis Chain, and other initiatives.\n\nAt BootNode, we share\ + \ a vision to build a decentralized organization and network with a decentralized\ + \ ecosystem of contributors. We strongly believe in a positive sum game for Gnosis\ + \ DAO, where many protocol developers, web2 and web3 builders, infrastructure participants,\ + \ researchers, and community members can work together.\n\n## Specification\n\n\ + The following items are the initial areas of contribution. However, they might change\ + \ if they are no longer needed or if there are other initiatives where BootNode\ + \ can provide higher value.\n\n### 1: Bridges\n\nThe team will work closely with\ + \ all the involved parties to maintain and improve the bridge solutions that empower\ + \ the Gnosis Chain (the native bridges [OmniBridge](https://omni.gnosischain.com/bridge)\ + \ and [xDAI Bridge](https://bridge.gnosischain.com/) as well as other solutions\ + \ such as [Connext Bridge](https://bridge.connext.network/) and [Hop Exchange](https://hopapp.exchange/)).\ + \ Also, it will work on a new bridge that will consolidate existing options in one\ + \ place. Last but not lease, we will contribute to the research and development\ + \ of the trustless bridge already in progress.\n\nMilestones can change once the\ + \ revised roadmap is discovered and created.\n\nMilestone #0\n\n* Goal: create a\ + \ comprehensive roadmap and kick-off onboarding\n* Tasks\n * Refine scope of work\ + \ and iterate over a roadmap\n * Define communication processes (roles, channels,\ + \ etc.)\n * Defile roles, assign responsibilities and allocate resources and team.\n\ + \ * Define specific milestones, timelines, and deliverables.\n* Deliverables\n\ + \ * A detailed roadmap with milestones, timelines, and action items.\n * A document\ + \ that defines the processes, workflows, and methodologies.\n* Outcomes\n * Stakeholders\ + \ agree on the roadmap.\n * The team has a refined execution plan.\n * A team\ + \ with the required skills is allocated to deliver the results according to the\ + \ roadmap.\n * Kick-off date for starting executing the roadmap.\n\nMilestone #1\n\ + \n* Goal: Maintenance and operational management\n* Tasks\n * Improve financial\ + \ operations of the bridges.\n * Native Bridges (Omni + xDAI).\n * Non-native\ + \ bridges (Connext + Hop).\n * Identify liquidity management needs on other bridging\ + \ solutions such as Hop and Connext.\n * Develop monitoring tools and dashboards\ + \ to measure financial performance easily. (this one can be used as a starting point:\ + \ https://dune.com/maxaleks/Compounding-in-xDai-bridges )\n * Improve observability\ + \ and monitoring of the bridge's infrastructure.\n * Live Monitoring application\ + \ that shows transaction status for each validator and can monitor transactions\ + \ in both directions. (this can be used as a starting point: https://docs.tokenbridge.net/about-tokenbridge/components/amb-live-monitoring-application\ + \ )\n * Increase decentralization and scalability of both native and non-native\ + \ bridges.\n * Identify routers’ and validators’ maintenance needs.\n * Communicate\ + \ and coordinate with involved stakeholders.\n * Identify and document technical\ + \ debt.\n * Identify governance issues if any and create a plan to solve them.\n\ + * Deliverables\n * Documented process of bridge operations.\n * Control dashboard\ + \ for measuring bridge's financial performance.\n * Documented architecture of\ + \ infrastructure, pipelines, and technical workflows.\n * Reporting about bridge\ + \ usage, costs, and revenues associated with bridges.\n * Communicate additional\ + \ capabilities of Omnibridge to developers.\n * List of financial KPI to keep track\ + \ of.\n * P&L reporting.\n* Outcomes\n * Better financial control, visibility,\ + \ and transparency of bridge operations.\n * Operation improvements reduce manual\ + \ and reactive work that leads to slow, unproductive, and error-prone issues.\n\n\ + Milestone #2\n\n* Goal: Consolidate Omni + xDAI UIs\n* Tasks\n * Create UX wireframes\ + \ for a consolidated UI.\n * Create the front-end and UIs.\n * If needed, refactor\ + \ Omni bridges and xDAI bridge backends and infrastructure to easily make the UI\ + \ merge.\n* Deliverables\n * A repository with the new consolidated UI.\n * New\ + \ UI is deployed.\n* Outcomes\n * UX is improved, aiming for fewer dropouts.\n\ + \ * Facilitate bridging operations into Gnosis Chain by a fairly simple process.\n\ + \nMilestone #3\n\n* Goal: Security assessment plan and evaluation of bridges operation\ + \ and infrastructure.\n* Tasks\n * Evaluate the current security (web2 and web3).\n\ + \ * Define a security plan and action items to improve the security of the bridges.\n\ + * Deliverables\n * A document that describes the security assessment.\n * A detailed\ + \ security roadmap and best practices to follow.\n* Outcomes\n * Improved awareness\ + \ of the current security.\n * Increased security of the operation and infrastructure.\n\ + \ * Reduced risks associated with possible security breaches (web2 and web3).\n\ + \nMilestone #4\n\n* Goal: Evaluate options for native bridges to bridge to other\ + \ networks (today, only mainnet is supported).\n* Tasks\n * Analyze and research\ + \ the needs and motivations to do it natively versus using/integrating with 3rd\ + \ party solutions.\n * Research and evaluate technical improvements and enhancements\ + \ according to the research.\n* Deliverables\n * A technical plan for enabling\ + \ users to easily bridge to as many networks as possible.\n * Submit GIPs according\ + \ to research.\n* Outcomes\n * The needs of assets bridging of users and protocols\ + \ are clearly defined.\n * Everyone can provide feedback on the future steps.\n\ + \nMilestone #5 (might change the priority to be done sooner)\n\n* Goal: discovery\ + \ phase to build a Bridge Aggregator.\n* Tasks\n * Evaluate building a consolidated\ + \ app that helps users to bridge assets from all kinds of chains to GC using any\ + \ supported solution (could be a combination of Li.finance, xDAI, Omnibridge, Connext,\ + \ Hop, and other options).\n * Identify technical and business requirements.\n\ + \ * Create a Product Specifications Document.\n * Create a roadmap with milestones,\ + \ timelines, effort estimates, etc.\n* Deliverables\n * Evaluation result: Go /\ + \ No Go.\n * Product Specifications Document.\n * Product Development Plan.\n\ + * Outcomes\n * Stakeholders understand if such a product is needed and its value\ + \ to the ecosystem.\n * The team has complete visibility on what needs to be built.\n\ + \nMilestones #6 and beyond: TBD\n\n### 2: Circles infrastructure\n\nWhen referring\ + \ to Circles Infrastructure, the Circle UBI project has been lacking continuity\ + \ of a development team, therefore, making the product roadmap hard to plan as every\ + \ milestone relies on software development. As a result, the enormous potential\ + \ of this ecosystem is not being fully realized. However, we could envision a possible\ + \ roadmap:\n\n* Contribution to user-friendly frontends, including Circles.Land\ + \ and Gnosis Safe.\n* Backends / Subgraphs\n* Monitoring\n* Dashboards\n* SDKs\n\ + * Tech support to other teams building on Circles infrastructure\n* Contribute onboarding\ + \ DAOs to benefit from Circles features.\n\nRoadmap: it is currently under development\ + \ being built by several parties. To be published soon.\n\nScope of Work: Bootnode's\ + \ team has already been working on this initiative as an ongoing project since May\ + \ 2022, contributing with: back-end, front-end, QA, UI, and Project Management.\n\ + \nAs an outcome of this proposal, we expect to maximize the overall Circles UBI\ + \ growth.\n\nThe ecosystem will initially benefit as follows:\n\n* Circles users\ + \ (individuals and DAOs): will enjoy new features, improved reliability, and great\ + \ UX.\n* Gnosis DAO: additional level of certainty in fulfilling the Circles UBI\ + \ vision.\n* Projects building on top of Circles; core infrastructure:\n * Public\ + \ roadmap with the features the team will implement in the future.\n * Access to\ + \ propose and prioritize feature requests.\n* Gnosis Chain: higher block utilization\ + \ due to the expected growth of the Circles protocol.\n\n### 3: Gnosis Beacon Chain\ + \ decentralization and security\n\nBootNode will setup and run the Gnosis Chain\ + \ full-stack (validator nodes and bridges) focusing on the Gnosis Beacon Chain and\ + \ its path to the merge contributing to making it happen before Main net.\n\nRoadmap:\ + \ [https://evening-lake-61d.notion.site/Gnosis-beacon-chain-merge-ca7e8759e5094b18accdc077e4959315](https://evening-lake-61d.notion.site/Gnosis-beacon-chain-merge-ca7e8759e5094b18accdc07)\n\ + \n### 4: Gnosis DAO growth\n\nWe believe that by relying on a long-term committed\ + \ engineering team, GnosisDAO ecosystem will be able to work on a more sound, clear,\ + \ and executable vision, considerably increasing the probability of hitting every\ + \ milestone in the roadmap. Therefore, many other Gnosis ecosystem’s efforts can\ + \ count on the outcomes produced by this team:\n\n* Support community development\ + \ and education about Gnosis Chain, Bridges, and Circle UBI.\n* Be available for\ + \ different potential needs of the DAO and the community.\n* Support research, create,\ + \ and deliver new proposals within GIPs and expand Gnosis Chain to other ecosystems\ + \ (protocols, networks, infrastructures, etc.).\n* Protocol smart contracts development\ + \ and GIP support.\n* Attend technical conferences and Gnosis DAO events to support\ + \ growth.\n* Support pair programming sessions and education with dApp teams to\ + \ share best practices and one-on-one support.\n* Bootstrap, run, and manage Gnosis\ + \ Beacon Chan and Gnosis Chain validators aligning long-term via GNO incentives.\n\ + \n### Team\n\nBootNode excellence in delivering an outstanding contribution and\ + \ thinking outside the box is leveraged by already existing characteristics that\ + \ have been poolish as a result of a team with an average of 10+ years of experience\ + \ building and shipping software for many industries and 5+ years for the EVM ecosystem\ + \ in particular.\n\nWe have identified the right candidates to build a **6 to 8\ + \ members cross-functional and autonomous team (a Squad)** with all the required\ + \ skills to work on the proposed scope of work, contribute to the network roadmap,\ + \ and other potential work valuable to the chain.\n\nSome team members have participated\ + \ in designing and developing the two existing native bridges (OmniBridge and xDai\ + \ Bridge) and have worked with other cross-chain projects contributing to the core\ + \ protocol and integrations, such as Connext Network. Also, part of the team has\ + \ been contributing to building the Circle infrastructure developing a “Group Currency”\ + \ layer on top of Circles for a couple of months and is fully knowledgeable about\ + \ it.\n\nBootNode’s track record of experience in the field provides a competitive\ + \ advantage to the GC that could speed the solution, derisk the DAO, and meet expectations.\n\ + \n### Progress status\n\n* Bi-monthly progress reports in the forum.\n* Participation\ + \ in the community calls.\n* Discord channels.\n* Roadmap, backlog, prioritization\ + \ discussions, etc. are transparent and visible in notion, GitHub, and any other\ + \ tool consistent with the other teams.\n\n### Terms of the Agreement\n\n* Time\ + \ horizon: 6 months (closer to the end, a follow-on proposal will be created).\n\ + * Amount: $580k in DAI or USDC.\n* GNO: 580 GNO (exclusively for running GBC validators\ + \ for at least 12 months).\n* Safe address in main net: eth:0x3bCba50Ec74d18c583e0A832DD19AE37E9348790\n\ + \n### Duration and Termination\n\n* This proposal shall come into force and be binding\ + \ upon the Parties from the date the proposal is approved by the GnosisDAO governance\ + \ mechanism.\n* The GnosisDAO may terminate BootNode’s engagement under this agreement\ + \ for any reason by Governance Mechanism upon a 30-day notice as a new discussion\ + \ thread in the GnosisDAO forum.\n* BootNode may terminate this agreement upon a\ + \ 30-day notice as a new discussion thread in the GnosisDAO forum.\n* Without previous\ + \ notification, BN will be entitled to terminate this agreement if GnosisDAO fails\ + \ to make payments for more than 2 consecutive periods.\n\n# About BootNode\n\n\ + **[BootNode](http://bootnode.dev/)** is a long-term dev & engineering partner focused\ + \ on the Ethereum ecosystem that accelerates the development and adoption of decentralized\ + \ infrastructure, protocols, applications, and ecosystems through engineering and\ + \ investment.\n\nFounded by a team of engineers with an average of 10+ years of\ + \ experience building and shipping highly available, highly scalable software for\ + \ many industries and 3+ years for the blockchain ecosystem in particular.\n\nBoot\ + \ Node contributes in different phases as an interdisciplinary team, from ideation\ + \ to massive adoption. \n\n> more details in the forum." +start: 1660142102 +end: 1660746902 +state: closed +author: '0x2036CAfe136F1Ba6201ca6Da6fcf461bD4c5e635' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 429470.563016967 +scores: + - 342051.18372301076 + - 84235.43701159944 + - 3183.942282356569 +votes: 588 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-62.yml b/public/GIPs/GIP-62.yml new file mode 100644 index 00000000..97bdcbed --- /dev/null +++ b/public/GIPs/GIP-62.yml @@ -0,0 +1,239 @@ +id: '0x909097194621a5be59ce7ad473974524d8806c0b824fb21396101cb3f3bb4408' +gip_number: '62' +url: https://snapshot.org/#/gnosis.eth/proposal/0x909097194621a5be59ce7ad473974524d8806c0b824fb21396101cb3f3bb4408 +title: Should GnosisDAO Sponsor Prode Markets? +body: '# Simple Summary + + + Prode is a decentralized betting platform built using Reality.eth and Kleros and + currently deployed on Gnosis Chain. Unlike other projects like Omen or Azuro where + 1-question markets are created and supported by liquidity providers, Prode focuses + on betting pools in which users bet on multiple outcomes and compete against each + other for the highest prize. This is a very popular type of sports betting scheme + that has been played across the world for many decades. + + + Prode was officially launched 1 month ago after 4 months of intense work and without + any external funding. To bootstrap the first markets and kickoff adoption of the + platform, the Gnosis DAO could sponsor the most attractive markets in exchange for + some of the creator''s fee rights of the markets chosen. Additionally Gnosis DAO + could provide funding to the Prode team to support the project''s development and + advertising. In exchange for the funds, Prode commits to giving GnosisDAO 100k USD + worth of governance tokens once the Prode token is released. + + + # Motivation + + + 1. Increase adoption of Gnosis Chain. We noticed that the onboarding of new users + is an issue, because getting xDAI on Gnosis Chain for the first time is confusing + and sometimes not very straightforward. There''s also a lot of competition among + sidechains and L2s, and Gnosis Chain is not the most popular one. + + + 2. Attract users and market creators to Prode. In the type of prediction markets + Prode focuses on, users usually look for markets with potentially big prizes (a + bit like a lottery). Initially, this is hard to achieve, because the dapp traffic + is low and therefore there are no market creators advertising their market pools, + and vice versa. One of the strategies to overcome this is to start creating markets + ourselves and fund them with juicy prizes. + + + # Specification + + + Total requested amount: 200k xDAI: + + + * 100k for sponsoring markets. + + + * 50k for the team. + + + * 50k for marketing. + + + ### Funds Allocation Details + + + Sponsor the following markets (100k xDAI total): + + + * FIFA World Cup Qatar 2022. 20k xDAI. Creator fees (5%) will be used to incentivize + the referral program within this market. + + + * T20 Cricket World Cup 2022. 5k xDAI. Creator fees (5%) go to UBI Burner to support + the UBI price and attract its community and supporters. + + + * F1 Grand Prix Japan & Brazil. 2.5k xDAI each. Creator fees (5%) go to GnosisDAO. + Breakeven*: 50k xDAI each. + + + * League of Legends World Cup 2022. 5k xDAI. Creator fees (5%) go to GnosisDAO. + Breakeven*: 100k xDAI. + + + * CS:GO BLAST Premier: World Final 2022. 5k xDAI. Creator fees (5%) go to a public + good project TBD. + + + * Upcoming 30 weeks of the NBA. 15k xDAI evenly split into each week matches. Creator + fees (5%) go to GnosisDAO. Breakeven*: 10k xDAI per market. + + + * Upcoming 30 matchdays of the English Premier League. 30k xDAI evenly split into + each matchday market. Creator fees (5%) go to each subsequent matchday market. + + + * Upcoming 20 matchdays of the Argentinian football league. 5k xDAI evenly split + into each matchday market. Creator fees (5%) go to UBI Burner to support the UBI + price and attract its community and supporters. + + + * 5k xDAI will be converted to bet vouchers and distributed to active Proof of Humanity + users instead of used to directly sponsor a chosen market. This will be important + for a couple of reasons. First, it will signal what markets are preferred (at least + by an active ethereum community). Second, it will bring activity and promotion to + Prode. Last, it will help onboard Ethereum Mainnet users to Gnosis Chain. + + + * Similarly, 5k xDAI will be converted to bet vouchers and distributed to active + bettors of Prode''s competitors, both from Gnosis Chain and other Chains. + + + *The breakeven point refers to the market pool size needed to recover the funds. + It could be lower if significant royalties are generated or if other sponsors fund + the market; it could be greater if a lot of users bet in the markets through referral + links. A bet placed after entering the market through a referral link will split + the creator fees in halves: 50% to creator and 50% to referral. + + + Team funding (50k xDAI). Although the team has been self-funding the project for + the past 5 months and will continue to do so in the short term, this extra funding + will allow the team to start working full-time on the project for the next 6 months. + Prode is currently being developed by 3 devs from the Kleros community. Additionally, + this funding would be enough to hire 2 interns for communication purposes and contract + free-lancing design services for the front-end and Prode''s NFTs. + + + Marketing funding (50k xDAI). Sponsoring markets alone is not enough to attract + users to Gnosis Chain and Prode. The 50k USD requested will be used as follows: + + + * ~15k xDAI will be used to partner with sports influencers/streamers/casters in + order to promote Prode and its markets. + + + * ~15k xDAI will be spent in traditional online advertising services. + + + * Based on what is learned in the upcoming months, 20k xDAI will be used in 2023 + Q1 to (1) sponsor strategic markets and (2) explore markets we haven''t considered + yet. + + + ### PRODE Token + + + The Prode protocol generates fees from each market. The team is in the process of + designing a governance token that will allow holders to manage the DAO''s funds + and control some protocol parameters. Once the token is released, GnosisDAO will + receive 100k USD worth of PRODE tokens. The price taken into account to calculate + the distribution will be equal to the cheapest price the tokens were sold at. + + + # Rationale + + + Prode markets tackle a prediction market niche that is currently unattended in the + blockchain industry. On the other hand, most decentralized prediction markets platforms, + which focus on single-event predictions, struggle to sufficiently incentivize liquidity + providers. Prode markets don''t have this problem, because the prize pool is bootstrapped + from bettors themselves. However, until Prode gets more popular and its market creator-bettor + ecosystem consolidates, sponsoring key markets could help adoption greatly. + + + A bettor who is not familiar with Gnosis Chain and Prode might not be attracted + to the platform if the prize pools are low. If attractive markets such as the FIFA + World Cup market gets a 25k USD funding, this would be a huge incentive for new + users to join the network. + + + 2022 Q4 will be a time of very popular sport events. This is a huge opportunity + to gain traction. Some examples: + + + * According to FIFA ~150 bn USD worth of bets were made during the World Cup 2018 + held in Russia. We should try to capture some of this for the World Cup 2022. + + + * Cricket is a very popular sport in Australia, India, Pakistan and England, which + constitute very big and diverse markets. In october the cricket world cup will happen. + + + * Esports have experienced a huge growth in the last decade and so have prizes and + bets around its tournaments. People following esports - usually young, techy gamers + - are a good fit for crypto/online bets, because they will deal better with the + UX friction dapps have. There are some big tournaments coming and we should make + the most of them. + + + * While big events attract a lot of users, they happen only a few times a year at + most. It''s also important to incentivize smaller markets that can be played on + a regular basis and thus create engagement in the long run. Football leagues are + a good opportunity to test this out. + + + # Implementation + + + Once this GIP gets approved, the ownership of the creator contracts of the markets + mentioned above will be transferred to the GnosisDAO address on Gnosis Chain. Afterwards, + either Prode''s team can administer the market funding on behalf of GnosisDAO or + the GnosisDAO can fund the markets directly by calling fundMarket(""){value: sponsoredValue} + in each market. These operational details will be discussed with the Karpatkey DAO + team. + + + 5% of the pools'' xDAI, including the funds sponsored, will be rewarded to the creator + address when the market closes. Additionally, if bets positions get traded in a + secondary market that supports royalties, the creator address (GnosisDAO or UBI + Burner) will receive 1.5% of trades as royalties. + + + The 100k USD requested for development and marketing will be sent to the Prode''s + multisig, which will administer the funds, on Gnosis Chain: 0x0029ec18568F96AFE25Ea289Dac6c4703868924d. + + + ## Relevant links + + + * App: [https://prode.eth.limo](https://prode.eth.limo/) + + * https://github.com/prodeapp + + * Twitter: https://twitter.com/prode_eth' +start: 1662657607 +end: 1663262407 +state: closed +author: '0x78DA2BCE1d0D8F81cd72c7274A2C4683B42b3AE6' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 21538.06704783013 +scores: + - 20610.47453669415 + - 804.4492285436486 + - 123.14328259233804 +votes: 525 +quorum: 0 +funding: + amount: 100,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-63.yml b/public/GIPs/GIP-63.yml new file mode 100644 index 00000000..4106f976 --- /dev/null +++ b/public/GIPs/GIP-63.yml @@ -0,0 +1,172 @@ +id: bafkreiftomumwvja4bjhkl4oqdwn24v7weuqa3embasjb36wrpu4tf67zi +gip_number: '63' +url: https://snapshot.org/#/gnosis.eth/proposal/bafkreiftomumwvja4bjhkl4oqdwn24v7weuqa3embasjb36wrpu4tf67zi +title: Should GnosisDAO award a Grant to Algovera to develop a DAO framework for Decentralized + AI Teams? +body: 'Simple Summary + + Algovera is requesting a grant of $50,000 to develop a DAO framework (on top of + Gnosis smart contracts) for decentralized AI teams. This will involve building a + Proof of Concept for publishing and co-owning AI assets in a trustless manner, receiving + profits generated by assets to the treasury, and sharing profits generated with + team members. + + + Algovera + + Algovera is a community of independent AI teams developing user-centric Web3 AI + applications. We’re building an AI creator platform where teams and their community + can keep ownership of and monetize their creations. We provide support to teams + including funding, community events/workshops and our decentralized AI framework + (DAID) provides guidance in how to build a decentralized AI DAO that is based on + a vision of cooperation, sustainability and ethics. Algovera Grants 2 has funded + 28 independent AI teams (called Squads) to date. We also train squads to use our + decentralized AI infrastructure, which consists of decentralized storage, compute + and marketplace (developed through grants from Ocean Protocol, 12+ OceanDAO grants + to date and 1 Ocean Shipyard grant, and 1 Filecoin grant). + + + Abstract + + DAO tooling can help to onboard AI developers to Web3, and improve coordination + and governance within distributed AI teams. We have been setting up Squads that + we fund within DAOs (currently DAOhaus) and have run into a number of problems. + It is not possible for AI squads to publish and co-own IP related to data, algorithms + and apps in a trustless manner, and there are no suitable tools for sharing profits + generated by assets. Furthermore, existing tools are targeted at generic Web3 users, + rather than data and AI teams. A UX study that we conducted showed that ownership, + monetization of datasets and AI models are the most important at this time for our + squads and communities. + + + The aims of this project proposal are to (i) build a Proof of Concept for using + Gnosis to enable the publishing and co-owning of data and AI assets, as well as + sharing of profits generated by assets and (ii) onboarding Algovera Squads to Gnosis + and ML teams. + + + Motivation + + AI development is currently controlled and owned by large tech companies within + the singular vision of human-competition, autonomy and centralization, without consideration + for society at large. We experienced this ourselves and would like to change this. + We believe that AI is a common good and communities should have ownership. Although + there are tools to develop AI models such as Kaggle or Huggingface, it is difficult + for AI teams to keep ownership and create sustainable revenue for AI DAO communities. + + + AI teams have hardly any experience with Web3, Gnosis and DAO frameworks. Through + our research and qualitative interviews, we found there is some awareness in the + value of decentralized AI specific tools and architecture but most tools do not + exist yet. Some of the biggest pain points for AI developers are lack of ownership + around what they create in universities and tech companies, and lack of infrastructure + for coordinating and monetizing their creations online. + + + Specification + + Work Package 1: Proof of Concept to publish data sets and AI models for monetization + of marketplaces + + During this work package, we will implement a Proof of Concept for trustlessly publishing + and co-owning IP NFTs for datasets and algorithms through a Gnosis Safe app for + AI DAOs, receiving earnings generated by assets into the treasury, and distributing + earnings back to the contributors/members of the team. Publishing of the asset will + be performed by the multisig, with the transaction being executed after the policy + defined by the multisig has been satisfied. The asset will be published with the + multisig wallet address as the author and any fees associated with the consumption + of the asset will be transferred to the multisig treasury. The final step to the + solution is implementing profit-sharing tools to distribute earnings back to the + contributors/members of the team. + + + Overview of goals: + + + Build a Gnosis Safe app for AI DAOs + + Publish datasets and algorithms to Algovera/Ocean Marketplace through app + + Receive earnings from marketplace into the Gnosis treasury + + Distribute amongst DAO members + + Documentation and video guide to onboard users + + Work Package 2: Onboarding of Algovera Squads to Gnosis and decentralized AI strategy + awareness and education + + In this work package, we will run regular Decentralized AI DAO (DAID) workshops + to not only develop Web3 awareness e.g. onboard our squads to Gnosis safe and monetization + tools but also to expose them to pluralistic strategies of how to develop decentralized + AI organizations. We believe that bringing together GnosisDAO and AlgoveraDAO squads + would be mutually beneficial to the community. + + + Current centralized AI systems do not actively consider community ownership or how + to integrate gender, racial or sustainability factors in developing AI models. Furthermore, + researchers have highlighted the harm of AI models that are benchmarked in human-competition, + autonomy and centralization [How AI Fails Us: Divya Siddarth, Glen Weyl et al. 2021]. + They propose a pluralistic vision of developing AI models that complement, cooperate + and support society rather than compete with humans. + + + This is why we have developed a Decentralized AI DAO framework 2 (DAID) which accelerates + our squads with technical tools and strategies that are rooted in interdisciplinary + team work, human-centered design, ethics, sustainability and community commercial + models. + + + Our goal is to host 2x interdisciplinary workshops with members of the GnosisDAO, + Ocean Protocol, IPFS and Algovera communities for six months, create 6 videos and + 5 tutorials to onboard our Squads to Gnosis, and to foster interdisciplinary teams + to push towards the development of AI datasets and models for Web3 projects and + DAOs. + + + DAID consists of 4 key areas: + + + Primary - Design Thinking: who is the user and who is impacted by my AI model? + + + Community Value Generators: How to achieve sustainable ethical, environmental and + commercial value creation. + + + Decentralized AI activities: from data sourcing, storage, training, deploy to publishing + AI models to market places. + + + DAO activities: covers how to set up a DAO, governance, proposals, treasury management + and member protection and monetization of data sets and AI models + + + Implementation + + The implementations must be completed before any GIP is given status “Final”, but + it need not be completed before the GIP is accepted. + + + ' +start: 1663357776 +end: 1663962576 +state: closed +author: '0x823351c03A99b4820793675760f4A64F5ccA9089' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 918.955916497632 +scores: + - 538.7968534744095 + - 355.9622294998721 + - 24.19683352335034 +votes: 406 +quorum: 0 +funding: + amount: 50,000 + currency: $ (USD) + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-64.yml b/public/GIPs/GIP-64.yml new file mode 100644 index 00000000..4838443f --- /dev/null +++ b/public/GIPs/GIP-64.yml @@ -0,0 +1,62 @@ +id: '0xd9dbc0cebba7b9a27f6fa3f30987b89b4dd50140ee3e21624ebc9bdb16049654' +gip_number: '64' +url: https://snapshot.org/#/gnosis.eth/proposal/0xd9dbc0cebba7b9a27f6fa3f30987b89b4dd50140ee3e21624ebc9bdb16049654 +title: Should GnosisDAO distribute SAFE tokens to incentivize decentralizing Gnosis + Chain? +body: 'As decided in GIP-29, GnosisDAO is receiving 15% of the total SAFE token supply + over a period of 4 years. We suggest using the SAFE tokens to support the main objective + of GnosisDAO: Making the Gnosis Chain successful. We want to position Gnosis Chain + as the most decentralized network available. To support this objective, we suggest + distributing the SAFE tokens as additional yield to those participating in staking + on the Gnosis Beacon Chain. + + + We suggest the following distribution: + + + - Equal distribution of vested SAFE tokens to GNO holders on a monthly basis until + the end of the locking period (February 15, 2023, about 0.9% of all SAFE tokens). + + - Eligible GNO: + + - GNO in locking contracts on Ethereum and Gnosis Chain. + + - GNO used by individual stakers. + + - GNO/sGNO used in the curve pool GNO:sGNO 19 + + - After the end of the locking period: + + Use up to 9.1% of the remaining SAFE tokens as additional yield for stakers on the + Gnosis Beacon Chain over the remaining vesting period. The distribution should be + based on the importance of the different staking categories: + + - individual stakers (e.g. dappnode users) + + - distributed liquid staking (e.g. rocket pool users) + + - professional staking services (e.g. chorus.one) + + liquid staking (e.g. stakewise, lido))' +start: 1663748765 +end: 1664353565 +state: closed +author: '0x6d9ABa400a2a487a5Fb76c6d56518835553CD284' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 105582.86777653798 +scores: + - 99478.5083949482 + - 6103.065728527026 + - 1.2936530627426663 +votes: 671 +quorum: 0 +funding: + amount: null + currency: null + confidence: null + error: 429 Resource has been exhausted (e.g. check quota). + model_used: none diff --git a/public/GIPs/GIP-65.yml b/public/GIPs/GIP-65.yml new file mode 100644 index 00000000..b0ef6769 --- /dev/null +++ b/public/GIPs/GIP-65.yml @@ -0,0 +1,226 @@ +id: '0x717248745aaf87378361c76f59bbb417c350eaff2cffe2b0e708f95090fa7069' +gip_number: '65' +url: https://snapshot.org/#/gnosis.eth/proposal/0x717248745aaf87378361c76f59bbb417c350eaff2cffe2b0e708f95090fa7069 +title: Should GnosisDAO fund Yubiai? +body: 'https://forum.gnosis.io/t/gip-65-should-gnosisdao-fund-yubiai/5901 + + + # Simple Summary + + + Yubiai is a marketplace developed by ProofOfHumanity community members, where you + can buy & sell services, digital products and physical ones using crypto, this will + allow: + + + 1. Extreme low fees in commissions & gas in every transaction. + + 2. People to have the possibility to use their crypto to buy and sell in a secure + and transparent way. + + 3. People offer their services, physical and digital products globally. + + + To support the development of the Yubiai Dapp, we would like to ask the GnosisDAO + for mentoring & funding in return for Yubiai Tokens & an increase in Gnosis chain + adoption. + + + ## Abstract + + + Yubiai is a project born from the Proof of Humanity community that came together + online to develop a web3 marketplace where you can buy everything with crypto. What + was done so far? + + + * [Demo ](https://prepro.yubiai.market/) + + * [Landing ](https://www.yubiai.market/) + + + [Presentation + + ](https://youtu.be/LuJ3WydMb1E) + + + At the core of Yubiai there are some protocols that give life to the platform: + + + 1. Gnosis Chain builds new market mechanisms for decentralized finance. Their three + interoperable product lines allow you to securely create, trade, and hold digital + assets on Ethereum at very cheap gas fees. Yubiai deploying on gnosis is a must, + enjoy the p2p transactions of everything there is on our platform at the cheapest + gas prices. + + 2. ProofOfHumanity a sybil resistance protocol on the blockchain, a mechanism for + social identity on ethereum. + + 3. [Kleros](https://kleros.io/) Escrow, and the Dispute Resolver. + + 4. Kleros Curate. “ Is this item following the marketplace rules?” By creating a + list, defining guidelines and putting curation in the hands of the community you + make a marketplace to operate accordingly to our own systems of rules. + + 5. [TalentLayer](https://www.indie.talentlayer.org/#/) is the interoperability layer + for work reputation. When you complete a job on Yubiai, you and the person you transacted + with will give each other a review; growing your reputation over time. TalentLayer + IDs allow freelancers on Yubiai to own your reputation as a soul-bound NFT. TalentLayer + IDs are interoperable: your reputation can work on any integrated marketplaces. + If you lose access to your wallet, your TalentLayer ID can be recovered to a new + wallet via an emergency recovery process. + + + To support the team, we are asking for funding from GnosisDAO over 250000 DAI in + return for 25,000,000 YBI tokens transferred soon after the deal is done. + + + ## Motivation + + + 1. Increase adoption of Gnosis Chain. This will benefit gnosis ecosystem and Yubiai + users due to the low gas fees. + + 2. Attract users and sellers to Yubiai. + + + Our goal is to provide a platform where buyers & sellers meet to transact in a secure, + cheap & fast way. We will build a DAO in order to have project participants be in + control over the project. + + + We believe that bringing together GnosisDAO and YubiaiDAO would be mutually beneficial + to the community. By supporting the YubiaiDAO community in technical matters, such + as [Gnosis Chain deployment](https://blockscout.com/xdai/mainnet/address/0xdE677961f2a802DF105d014B8D7042914bb780cf/contracts) + and Zodiac integration, the launch of YubiaiDAO could be facilitated. + + + To enable the YubiaiDAO launch team to keep developing pre-launch, we propose a + token swap in which GnosisDAO would transfer $250,000 worth of DAI to support the + project. In return, we will transfer 25,000,000 YBI tokens to GnosisDAO soon after + the deal, out of a total supply of 1000M YBI tokens at launch. + + + The majority of the funding will go towards the development of the Yubiai Marketplace + and marketing. + + + More information about YubiaiDAO can be found in a dedicated write-up at [Lite Paper + ](https://scythe-yarn-631.notion.site/Links-f792b511b11943c4925778b3a0905eb1). + + + ## Specification + + + * The Yubiai Marketplace will enable $CirclesUBI as currency, beside eth, dai(on + Gnosis chain). + + * GnosisDAO will invest $250,000 worth of DAI in return for 25,000,000 YBI tokens + out of a supply of 1,000,000,000 at the time of launch. + + * Received funds will be managed within the DAO multisig at yubiai.eth. + + * The signers consist of core YubiaiDAO members. If interested, a representative + from GnosisDAO can join the signatories. + + * yubiai.eth will hold the minter role for YBI tokens. + + * A portion of the revenues, including but not limited to transaction fees generated + on the Yubiai Marketplace, will flow back to YubiaiDAO. + + * Deploy of the Yubiai Marketplace on Gnosis Chain. + + + ## Rationale + + + Yubiai tackles peer to peer transactions of services, physical & digital goods, + NFTs using crypto as currency, we believe that this usecase hasn’t been developed + enough (most projects focusing on financial applications) and that Gnosis Chain + using a stablecoin as its native token is the perfect chain for ut. Others projects + attempting to create marketplaces, do not have the protocols that we are leveraging + in order to provide the best and safest UX as well as all the incentives that are + in place, such as the lowest fees from each transaction, leveraging the Proof Of + Humanity community and being able to get the most out of their offerings for the + seller and get their needs met by the buyers. The marketplace business has huge + adoption of the total crypto population. + + + + + ## Implementation + + + Once this GIP gets approved, the 250k USD worth in DAI requested for development + and marketing will be sent to the Yubiai’s multisig, which will administer the funds: + 0x17d79CF96896c4d2aa4d4a19a2c8dD08DaFd163D. And Yubiai gnosis multisig will send + 25,000,000 $YBI tokens to GnosisDAO address. + + + ## Tokenomics + + + * User Incentives : 50% + + * Treasure/DEX Liquidity: 20% + + * Team: 15% + + * Advisors/Help: 2.5% + + * Marketing: 12.5% + + + ## Funds Allocation Details + + + * Team salaries + + + 150k DAI + + + * Marketing + + + 100k DAI (focusing 50% on the weeks before and during the launch). The rest to maintain + a stable {but less intensive} (marketing effort for the rest of the year). This + rest would be locked and would be unlocked progressively on time. + + + Total 250k DAI + + + ## References + + + * [Ultra lite paper ](https://scythe-yarn-631.notion.site/Links-f792b511b11943c4925778b3a0905eb1) + + * [Testing(on goerli) ](https://app.yubiai.market/) + + * [Github ](https://github.com/yubiai) + + * [Telegram ](https://t.me/yubiai) + + * [Twitter](https://twitter.com/YubiaiM)' +start: 1663356357 +end: 1663961157 +state: closed +author: '0x245Bd6B5D8f494df8256Ae44737A1e5D59769aB4' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 21023.50759161606 +scores: + - 20052.653106539503 + - 800.311525169329 + - 170.5429599072328 +votes: 410 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-66.yml b/public/GIPs/GIP-66.yml new file mode 100644 index 00000000..6d11cf4e --- /dev/null +++ b/public/GIPs/GIP-66.yml @@ -0,0 +1,41 @@ +id: '0xba3e2d4617954083a052dc08150315a152e835bbbd34c576a86976cf3dda6452' +gip_number: '66' +url: https://snapshot.org/#/gnosis.eth/proposal/0xba3e2d4617954083a052dc08150315a152e835bbbd34c576a86976cf3dda6452 +title: Should GnosisDAO sponsor The DAOist Bogota? +body: "The DAOist Bogota will be an event on Sunday, October 9th that will kickoff\ + \ Devcon week. This time we will go for our biggest, most ambitious DAOist event\ + \ yet aiming to have up to 1400 attendees.\n\n**If you're interested in supporting\ + \ this proposal, please submit your vote ASAP so that the DAOist can include GnosisDAO\ + \ as a sponsor in the deliverables in time** \n\nAs “The DAO chain”, Gnosis Chain\ + \ is invited to participate as sponsors for this event contributing also through\ + \ talks and/or workshops from contributors that will be joining us in Colombia this\ + \ year.\n\nIn the past, different DAOs that live in the Gnosis Chain, as well as\ + \ Gnosis itself, have participated in the Paris, Lisbon, Mexico City & Amsterdam\ + \ editions of The DAOist. This is an opportunity to reaffirm why Gnosis Chain is\ + \ a great home and neighborhood for current, new and future DAOs.\n\nBased on community\ + \ signaling, for $11,000 USD GnosisDAO would be getting the following benefits from\ + \ the Ride or DAO tier:\n* Talk Slot\n* Online & Print visibility\n* 8 tickets -\ + \ All inclusive\n* 1 Summoner Swag Bags\n\nThe DAOist Bogota will happen on Sunday,\ + \ October 9th, 2022. A talk has been suggested by @Jahed on “How DAOs can use the\ + \ pattern library and what mistakes it can help them avoid”." +start: 1664807865 +end: 1665412665 +state: closed +author: '0xB22981bA3FE1De2325935c91a3B717168fB86714' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 1434.3586471709777 +scores: + - 386.84234485768167 + - 1006.1413982012622 + - 41.37490411203405 +votes: 574 +quorum: 0 +funding: + amount: 11,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-67.yml b/public/GIPs/GIP-67.yml new file mode 100644 index 00000000..37e5408f --- /dev/null +++ b/public/GIPs/GIP-67.yml @@ -0,0 +1,170 @@ +id: '0x8d79d7db03736acf31af752efa45ef49106afbf7b7ecc174d839811fa5281b57' +gip_number: '67' +url: https://snapshot.org/#/gnosis.eth/proposal/0x8d79d7db03736acf31af752efa45ef49106afbf7b7ecc174d839811fa5281b57 +title: Should GnosisDAO fund Gnosis (chain) Ecosystem Analysis and Dashboard? +body: 'Simple Summary + + To create an in-depth Ecosystem Report and Live Ecosystem Dashboard that helps attract + new resources to Gnosis and improve resource coordination among existing stakeholders. + + + Abstract + + To improve resource coordination and allocation within the Gnosis ecosystem, GnosisDAO + should fund the creation of a curated overview and ecosystem dashboard. This will + improve navigation of the Gnosis ecosystem and fast-track decision-making (such + as investments, grants, partnerships, business development, and more). A curated + Gnosis overview based on an in-depth analysis of its key players will strongly improve + the UX and navigation of projects building on the Gnosis chain. + + + Motivation + + The Gnosis ecosystem evaluation and dashboard aim to improve UX for new joiners + and longstanding contributors. It will speed up decision-making and coordination + by improving the navigation of the space through a curated ecosystem overview. This + will also enable new features, such as sorting all projects by a rating score. Thus + users can easily find projects that fulfill their needs and match their level of + interest or risk appetite. + + + Making it easier for Gnosis stakeholders to understand and navigate all projects + on Gnosis will save a lot of time and resources related to due diligence and decision-making. + + + The report and dashboard can also be used as a starting point for a potential GnosisDAO + Ecosystem Fund or any other Grants/Builder program. Moreover, it can be used as + a benchmark to follow the developments and improvements and uncover gaps. + + + Specification + + The program will start with an ecosystem mapping and methodology improvement facilitated + by two top-raters of Prime Rating (rank Master 1 or higher). An updated version + of the current review framework will be made to match the Gnosis context, and a + list of all projects on Gnosis with research priorities will be created. + + + After the pre-research, the Prime Rating team will host two seasons (rating contests) + in collaboration with Gnosis community members to evaluate at least 40+ projects + on Gnosis. During these events, analysts can get rewarded with DAI, GNO, and D2D + for reviewing the Gnosis ecosystem. + + + From this research, two resources will be created, namely: + + + An Ecosystem Report - An easily digestible report that showcases the existing ecosystem + (from tech to projects built on the Gnosis chain and identifies potential areas + for improvement to expand the ecosystem). The report can be used by users, builders, + and funders alike to speed up their decision-making. + + + The Gnosis Dashboard - A web application that provides an overview of all projects + on Gnosis that can be reviewed using our methodologies with a letter score based + on a proven methodology, analyzing the quality of key attributes of each project + (including team, governance, tokenomics, value-proposition and more). The Dashboard + will be tailored to Gnosis and hosted on a Gnosis-native domain. An example of a + dashboard can be found here 3. + + + Review Methodology and Process + + The project will be executed by Prime Rating, an analyst collective with over 50+ + contributors that operates as an independent sub-DAO of PrimeDAO. Since early 2021, + Prime Rating has created multiple frameworks to evaluate projects and ecosystems + with over 200+ reports created by 60+ individuals and successful projects executed + with Celo, 1kx, Kyber, and Metaportal. It has a partnership with leading research + group DeFi Safety which provides the technical review, whereby Prime Rating focuses + primarily on the fundamental side. + + + Prime Rating operates as a DAO - where reports are created by analysts and reviewed + by experienced DAO members in a Web 3.0 native way - allowing for native ecosystem + members to learn, level up, and earn rewards. Analysts in Prime Rating earn a rank + by successfully submitting reports accepted via governance, which is manifested + as on-chain reputation, thus representing their experience. + + The current review framework includes DeFi, Metaverse, and ReFi and provides deep + insights into the reviewed projects. This is then translated into a letter score, + representing the overall quality of a project. + + + Implementation + + Timeline and Budget + + + Within 4 weeks of this proposal passing, the top raters of Prime Rating (rank Master + or higher) will create an ecosystem map to ensure a clear overview of the current + Gnosis ecosystem. Based on this preliminary research, an updated version of the + current review framework will be made to match the Gnosis context, and a list of + all projects on Gnosis with research priorities will be created. + + Within 12 weeks of the completion of the pre-research, the Prime Rating team will + host two seasons (each 5-week long rating contests) with existing raters and Gnosis + community members to analyze at least 40+ projects building on Gnosis. During these + events, analysts can get rewarded with DAI, GNO, and D2D for reviewing the Gnosis + Ecosystem. + + Within 4 weeks of the completion of the events, the Prime Rating team will create + a live dashboard similar to the current Rating Dashboard 3 to be hosted on a Gnosis + native domain such as ecosystem.gnosis.io 2 + + Within 6 weeks of the completion of the rate-athons, the top raters will create, + design, and publish an ecosystem report with key insights gained during reviewing + the projects. + + + GnosisDAO will provide 58,500 DAI + 400 GNO to Prime Rating to run the full program + within 18 weeks of this proposal passing. Received funds to be managed by the Prime + Rating multisig at primerating.eth. Rewards to be allocated on Gnosis Chain. + + + Fund Allocation Details + + Below is a breakdown of the expected spending of the budget based on previous campaigns. + + + Preliminary research phase: 8,000 DAI + 40 GNO for three weeks of research by two + top raters. + + Rating Season: 15,500 DAI + 200 GNO to be distributed to analysts and reviewers + (expected to be split between 15+ individuals) + + Ecosystem Report: 10,000 DAI + 60 GNO for four weeks of research by two high-level + raters + + Dashboard: 7,500 DAI + 25 GNO to design, develop and host the Ecosystem Dashboard + on a Gnosis native domain. + + Program Management: 12,500 DAI + 75 GNO for 5 weeks of program management + + Marketing: 5,000 DAI to support marketing and design efforts and purchase media + to support the rate-athon and report. + + Total: 58,500 DAI + 400 GNO + + + All rewards will be allocated on Gnosis Chain to promote usage.' +start: 1664965333 +end: 1665570133 +state: closed +author: '0x5C89C420A9E82Ea9AEDBaAab03302e39982919b9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 2186.7812637765533 +scores: + - 2175.353369147766 + - 8.733973182893616 + - 2.6939214458942824 +votes: 641 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-68.yml b/public/GIPs/GIP-68.yml new file mode 100644 index 00000000..4837b385 --- /dev/null +++ b/public/GIPs/GIP-68.yml @@ -0,0 +1,146 @@ +id: gip-68-should-gnosisdao-fund-rndaos-community-health-analytics-and-benchmarking-tool +gip_number: 68 +url: https://forum.gnosis.io/t/gip-68-should-gnosisdao-fund-rndaos-community-health-analytics-and-benchmarking-tool +title: Should GnosisDAO fund RnDAO's Community Health analytics and benchmarking tool? +body: "## Simple Summary\n\nIf Web3 is all about communities, how do we know if we’re\ + \ heading in the right direction?\n\nWe’ve been advancing a research project to:\n\ + \n * develop a framework for Community Health with actionable metrics\n * create\ + \ an open source data collection tool\n * implement the tool in GnosisDAO and others\n\ + \ * analyse the interactions and perceptions data to validate the framework and\ + \ provide insights to advance the Gnosis community.\n\n\n\nWe’re seeking $30,000\ + \ or equivalent as grant match-funding to complete the project.\n\n## About RnDAO\n\ + \nWe’re an R&D DAO with a mission to empower humane collaboration. Having already\ + \ delivered research projects on [sub-DAOs ](https://rndao.mirror.xyz/Qn0Y71EYRUB-6Kn0jH47baWulXoIe-dmTYIVuJeEOt8)and\ + \ [DAO Conceptual Foundations ](https://rndao.mirror.xyz/1zGqbsh1YZNi3I9yvtk_2VMcpyg_dvHF1GlZ_LAO3p4),\ + \ [Decentralised Leadership,](https://rndao.mirror.xyz/7rI4iyJ4tchGdZr3WwEY9Kn_ynB4NvdEIH1UTm1UceU)\ + \ [DAO Compensation ](https://rndao.mirror.xyz/aKI_cniOIsTcxNz4xC0EqzlXDDykwLw6geEc0ipFvIs),\ + \ and [more ](http://rndao.mirror.xyz/).\n\n## Abstract\n\nLike many others, Gnosis\ + \ depends on the health of its community and its vibez—yet understanding and measuring\ + \ these factors (what we call Community Health) is challenging.\n\nToday, Web3 communities\ + \ are left to rely on infrequent transactions data (on-chain records), while data\ + \ from the significantly more frequent social interactions is limited to basic indicators\ + \ of Discord or Discourse, Web2-oriented bots like Statsbot that give simplistic\ + \ measurements, or a patchwork of “homemade” surveys to fill in the gaps. These\ + \ solutions are ill-suited for DAO communities, surveys are time-consuming for community\ + \ managers and contributors to use, and the results of these approaches, hampered\ + \ by poor indicators and/or poor sampling, are unreliable.\n\nPerhaps even direr,\ + \ the lack of real-time analytics leaves DAO community leaders and members without\ + \ established baselines to measure against to understand the impact of community-focused\ + \ initiatives, identify best practices, monitor shocks to the system, or rapidly\ + \ gauge the effects of system-wide changes (such as market crashes, protocol migrations,\ + \ etc.).\n\n## Motivation\n\nTo advance the Gnosis ecosystem by supporting a humane\ + \ understanding of DAOs, enabling community managers, leaders and members to better\ + \ understand and support the wellbeing of communities and know what’s helping and\ + \ what’s hindering them. Ultimately leading to a more resilient and successful Gnosis\ + \ ecosystem.\n\n## Specification\n\nFor the conceptual framework, we have assembled\ + \ a team including two PhDs in network science and an organisation designer with\ + \ significant DAO and community building experience (myself) to bridge both theory\ + \ and practice. We’ve reviewed over 50 papers on the topics of Community, Social\ + \ Network Analysis, Resilience, Trust, Engagement, and more. And are synthesising\ + \ all of these findings to define the key indicators that have high validity and\ + \ high predictive capacity for community health, while also taking a holistic perspective\ + \ that accounts for member’s wellbeing and planning to collect data across communities\ + \ to offer an ecosystem health scrore too.\n\nFor the data collection tool, we’re\ + \ going beyond traditional surveys.\n\nThis research proposal focuses on the use\ + \ of two critical techniques as a starting point:\n\nOrganizational Network Analysis\ + \ (ONA) is a structured way to visualize how communications, information, and value\ + \ creation occur through an organization based on interaction graphs. ONA has been\ + \ shown to provide a wide range of insights to improve contributor retention, avoid\ + \ member burnout, predict team performance and community resilience, identify key\ + \ contributors, enable decentralization, and improve coordination. Although relatively\ + \ new, ONA is gaining in popularity over traditional survey tools.\n\nPulse Surveys\ + \ are frequent and automated micro-surveys that provide qualitative and quantitative\ + \ insights. In traditional organizations, they have been shown to increase employee\ + \ response rate and employee engagement with related initiatives. They’re also used\ + \ as a tool for culture design and implementing culture change. Lastly, Pulse Surveys\ + \ significantly reduce admin work for community managers and related roles.\n\n\ + The data is anonymised and collected in a central repository for this first phase\ + \ (we’re exploring decentralised hosting) and managed by a team having received\ + \ ethics training and at risk of losing their credentials should it be misused.\n\ + \n## Rationale\n\nThe techniques used (ONA based on communication and Pulse Surveys)\ + \ provide maximum insights on Community Health compared with exclusively on-chain\ + \ data analysis. And provide minimum disruption for community members and minimal\ + \ admin compared to long-form surveys and user interviews. Crucially, the techniques\ + \ selected and the usage of Discord messages increase participation by those less\ + \ likely to respond to long survey e.g. those less engaged and thus likely with\ + \ the most valuable feedback to give.\n\nAlthough our initial focus is Community\ + \ Health metrics, the proposed approach sets the foundation for further applications.\ + \ The combination of ONA and pulse surveys offers unprecedented actionable insights\ + \ in real-time. Some of the potential applications and insights for Gnosis DAO and\ + \ Gnosis-Chain-based DAOs are:\n\n * Generate baseline metrics for Community Health\ + \ / vibez to quantify and better understand the impact that a specific event is\ + \ having on a community and/or sub-groups within the community\n * Predict which\ + \ contributors are likely to leave the DAO and take preventive action (without breaching\ + \ privacy)\n * Build funnels to track member onboarding and identify areas for\ + \ improvement\n * Identify measurements of decentralization to serve as KPIs or\ + \ Insights metrics\n * Monitor specific topics like contributor wellbeing, alignment,\ + \ community experience, etc. in near real-time\n * Attract talent and investment\ + \ with objective Community Health metrics instead of proxy metrics like member count\ + \ or proposal count, or financial metrics such as TVL\n * Help new contributors\ + \ find context-rich mentors outside of the existing pool of well-known but time-poor\ + \ candidates\n\n\n\nIn addition to the initial research on Community Health, the\ + \ potential applications mentioned above (and others to be found) can enable more\ + \ effective and targeted efforts to build healthier DAO communities.\n\nThis research\ + \ also helps reduce the tooling gap in DAOs compared to the employee and stakeholder\ + \ experience at traditional corporations.\n\n## Why our Team?\n\nWe combine deep\ + \ expertise in Network Science and Organisational Network Mapping, Business Intelligence,\ + \ DAOs and Community Building.\n\nTeam Leads\n\nKaterinabc \nPh.D. in Team Dynamics\ + \ using Social Network Analysis, Teaching Collaboration, and Organizational Performance\ + \ at Northwestern University (since 2016). \nCo-organized Learning in Networks\ + \ sessions at the International Conference of Social Network Analysis (2018 - 2020),\ + \ and previously advised a people analytics company on social network metrics. \ + \ \nTwitter:[ twitter.com/katerinabohlec ](http://twitter.com/katerinabohlec) \n\ + Linkedin:[ linkedin.com/in/katerinab ](http://linkedin.com/in/katerinab) \nGithub:[\ + \ https://github.com/katerinabc/ ](https://github.com/katerinabc/)\n\nThegadget.eth\ + \ \nSoftware Engineer. Previously, Product Manager at Neolyze (Business Intelligence\ + \ Dashboard for Instagram). \nGithub:[ https://github.com/thegadget-eth/](https://github.com/thegadget-eth/)\ + \ \nTwitter:[ https://twitter.com/mr_gadget22 ](https://twitter.com/mr_gadget22)\n\ + \nDanielo \nPreviously, Head of Governance at Aragon, 8 years experience in Organization\ + \ Design consulting (clients include Google, BCG, Daymler, The UN, and multiple\ + \ startups), and visiting lecturer at Oxford University. \nTwitter*:*[ https://twitter.com/_Daniel_Ospina\ + \ ](https://twitter.com/_Daniel_Ospina) \nLinkedIn:[ https://www.linkedin.com/in/conductal/](https://www.linkedin.com/in/conductal/)\ + \ \nNote: Other RnDAO members will participate throughout the process in user research,\ + \ literature review, tool development, and workshop facilitation.\n\nTeam Advisor\n\ + \nSam \nPreviously, Head of Technical Research at Aragon. Previously, Lead Developer\ + \ of the official JavaScript API for the Ethereum blockchain. \nGithub:[ https://github.com/nivida\ + \ ](https://github.com/nivida) \nTwitter:[ https://twitter.com/furter_samuel ](https://twitter.com/furter_samuel)\n\ + \nSee additional team members here:\n\n[sobol.io/d/rndao/structure?view=circles](http://sobol.io/d/rndao/structure?view=circles)\n\ + \n## Implementation\n\n## Budget & Timeline\n\nBudget\n\n$30,000 in USDC (or equivalent)*\n\ + \nDAO Health Conceptual Framework and translation into actionable metrics: $8,000\n\ + \nData Collection Tool Development (discord bot for interactions data collection,\ + \ config front-end, and results dashboard): $17,000\n\nData Analysis, Insights Report,\ + \ and Community Workshop: $5,000\n\n * the requested budget forms part of a total\ + \ $90,000 target. Total project costs will be split across multiple, participating\ + \ DAOs (grants already received from Aragon and Aave).\n\n\n\nEstimated Timeline\ + \ \n(the work has already begun and we’re currently in week 5 of this roadmap)\n\ + \nWeek 1-8 (completed)\n\n * Literature Review\n * Data Collection Tool PoC\n\n\ + \n\nWeek 9-12 (we’re already at week 9 of this roadmap)\n\n * Finish Data Collection\ + \ Tool Development\n * Data Collection Tool Implementation on Discord\n * Presentation\ + \ of Dashboard Prototype and iteration\n\n\n\nweek 13-16\n\n * Data Analysis and\ + \ Community Health Dashboard go live (possible integration with other dashboards\ + \ /properties)\n * Workshop with community to discuss findings and recommendations\n\ + \n\n\n## GnosisDAO Snapshot\n\n_Phase 2 Proposals: Please ignore this section,\ + \ and leave as is. It is used for Phase 3 proposals. \nPhase 3 Proposals: Add a\ + \ link to the corresponding GnosisDAO Snapshot poll you’ve created._\n\n2 Likes\n" +start: 1664555971 +end: null +state: + - phase-2 +author: danielo (twitter @_daniel_ospina) +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 30,000 + currency: $ (USD) + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-69.yml b/public/GIPs/GIP-69.yml new file mode 100644 index 00000000..4ec848ab --- /dev/null +++ b/public/GIPs/GIP-69.yml @@ -0,0 +1,91 @@ +id: '0x6514a687509c3d974f91ccd602ee9c10f778bd7e855d5e2c154bb8635d3b8860' +gip_number: '69' +url: https://snapshot.org/#/gnosis.eth/proposal/0x6514a687509c3d974f91ccd602ee9c10f778bd7e855d5e2c154bb8635d3b8860 +title: Should Gnosis Partner with DAOhaus to Support DAO tooling on Gnosis Chain? +body: "https://forum.gnosis.io/t/gip-69-should-gnosis-partner-with-daohaus-to-support-dao-tooling-on-gnosis-chain/5970\n\ + \nSummary\nDAOhaus wants to deepen its partnership with GnosisDAO and is requesting\ + \ $300k USD equivalent in stablecoins or GNO to the DAOhaus Core Contributor DAO,\ + \ WarCamp.\n\nAbstract/Description\nDAOhaus provides purpose driven communities\ + \ on Gnosis Chain with an open and free to use no-code platform for launching and\ + \ managing their Moloch DAOs.\n\nBased on our activity on Gnosis Chain and previous\ + \ collaborations with Gnosis, DAOhaus is interested in deepening the partnership\ + \ between GnosisDAO and DAOhaus by supporting initiatives to drive more activity\ + \ and communities to the Gnosis Chain ecosystem.\n\nOur goals around making DAO\ + \ tooling more accessible and composable for both users and developers aligns with\ + \ Gnosis’ goals to attract more users and developers to the Gnosis Chain ecosystem.\n\ + \nWe believe Gnosis Chain enhances the cultural relevance of the Ethereum ecosystem\ + \ and is comparable in cultural legitimacy to Mainnet. DAOhaus is thrilled to support\ + \ and be supported by Gnosis Chain.\n\nMotivation/Rationale\nWe have been referring\ + \ to Gnosis Chain as the “DAO Chain” for the better part of a year, and it is safe\ + \ to say that DAOhaus calls Gnosis Chain home.\n\nWe are proud contributors to the\ + \ Gnosis Chain Weekly newsletter, producing a DAO of the Week 1 piece each week\ + \ and the Zodiac DAO wiki as early and ongoing contributors of DAO success patterns.\n\ + \nAll of our core operations take place on Gnosis Chain and DAOhaus has provided\ + \ DAOs on Gnosis Chain with excellent tooling, bug maintenance, support and a seamless\ + \ UX - thanks to Gnosis’ high tx throughput & low costs.\n\nDAOhaus provides pertinent\ + \ subgraph infrastructure to the Gnosis Chain ecosystem, where the daohaus-xdai\ + \ subgraphs [1] [2] [3] have around ~700k queries per day with no server or IP querying\ + \ more than ~40k on a given day, resulting in a fairly wide distribution of DAOhaus\ + \ subgraph queries!\n\nSince 2020, DAOhaus users have created 1k+ DAOs on Gnosis\ + \ Chain, onboarded 10k+ unique DAO members, submitted 40k+ proposals, and launched\ + \ 700+ Gnosis Safes through the DAOhaus app. [1] [2] [3]\n\nAs of 2021, DAOhaus\ + \ DAOs have had approximately $400M in total value flow through the platform.\n\n\ + A stablecoin or GNO grant from Gnosis DAO would increase our capacity to build more\ + \ valuable tools for DAOs and ultimately bring more DAOs, users, devs, and talent\ + \ into the Gnosis Chain ecosystem.\n\nIf passed, DAOhaus and Gnosis will enter into\ + \ a positive and mutually reinforcing collaboration that will sustain growth across\ + \ the Gnosis Chain ecosystem for years to come.\n\nSpecification\nGrant funds will\ + \ be allocated to three primary areas of focus, each of which supports our larger\ + \ objective to bring community-first coordination tools to more human networks.\n\ + \nDeliverables and Activities\n1. New DAO deployment tools\nDevelopment of a Safe\ + \ Summoner App - enabling multisigs to easily level up into DAOhaus v3 DAOs\nDevelopment\ + \ of apps/tools for migrating from DAOhaus v2 to DAOhaus v3\n2. Educational content\ + \ for DAO users & operators\nCreate docs, explainers, and tutorials for new and\ + \ experienced DAO users & operators\nFocus on common governance patterns, best practices,\ + \ migration paths and more.\n3. Developer advocacy, outreach, and support\nTo be\ + \ executed by the DAOhaus developer relations (DevRel) working group\n\nEncourage\ + \ use of the DAOhaus v3 libraries by external development teams\nProvide active\ + \ integration support & guidance to Gnosis ecosystem developers\nInform and execute\ + \ further development of DAOhaus v3 libraries based on developer community needs\n\ + Fund developer grants, bounties, and/or hackathon prizes\nOverview\nEach of the\ + \ above initiatives will support our goal of onboarding 100 new DAOs to Gnosis Chain\ + \ by Q2 2023. Additionally, these activities will have the following positive impact\ + \ for Gnosis:\n\nProvide Gnosis Safe users additional community-oriented options\ + \ for governing their assets and network\nProvide additional paths for developers\ + \ to build on Gnosis Chain and Zodiac\nIncrease support for developers on Gnosis\ + \ Chain\nTeam\nThis work will be conducted by Warcamp, the DAO of core contributors\ + \ to DAOhaus.\n\nThis table represents the current team assembled for executing\ + \ on the deliverables outlined above. Personnel changes are quick on our team and\ + \ can be expected in the coming months. We offer this as a soft guideline for how\ + \ we are thinking about work distribution.\n\nContributor\tPrimary Role\n01000011\ + \ 2\tContent / UX\nadrienne 1\tDesigner\nAmos 1\tDevRel\nAvi 1\tDesigner / UX\n\ + Bau 1\tContent\nBrian 1\tDeveloper\nChristina 1\tContent\nearth2travis 1\tProject\ + \ Manager\nDekan Brown 1\tDeveloper\nJord 1\tDeveloper\nJP 1\tProject Manager\n\ + Jeremy 2\tTester\nKeating 1\tDeveloper\nPlor 1\tProject Manager\nSantiago 1\tDeveloper\n\ + Sam Kuhlmann 1\tDeveloper\nScott 2\tDeveloper\nSpencer 2\tProduct Manager / PR\n\ + TW 1\tDocumenter\nUI369 1\tDevRel\nFund Dispersal\nTo fund the development of the\ + \ above, DAOhaus is requesting stablecoins or GNO directly to it’s core contributor\ + \ compensation vault (a Safe Minion): gno:0x9Fa12b5507B43229cB5bf96A056fE77E50aA99c9.\n\ + \nWe appreciate any feedback or support you can provide on our proposal, please\ + \ feel free to leave comments in the doc or drop your feedback below!" +start: 1665780018 +end: 1666384818 +state: closed +author: '0x0feF92A34ecF1F742B01c9e3cB2732A83C6067b6' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 1844.8804481285142 +scores: + - 1587.9889034172556 + - 186.54563994146977 + - 70.3459047697886 +votes: 782 +quorum: 0 +funding: + amount: 300,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-7.yml b/public/GIPs/GIP-7.yml new file mode 100644 index 00000000..d5743874 --- /dev/null +++ b/public/GIPs/GIP-7.yml @@ -0,0 +1,115 @@ +id: QmdbLM9oRMZcKeK7AXR2xkLvSwV6mvCy9y5xP5BDYKEcEW +gip_number: '7' +url: https://snapshot.org/#/gnosis.eth/proposal/QmdbLM9oRMZcKeK7AXR2xkLvSwV6mvCy9y5xP5BDYKEcEW +title: Pay GNO Reward for GNO<>ETH Sushi LP +body: 'Summary: + + + Paying out a GNO reward on top of the SUSHI reward that the GNO<>ETH Onsen pool + pays + + + Abstract: + + + The objective of this proposal is to kick off a crossDAO collaboration attempting + to create stakeholders for both communities (Sushi and GnosisDAO). + + + GNO<>ETH is a part of Onsen and already accrues Sushi rewards. + + + Through a liquidity incentivisation campaign, both teams can distribute voting power + to the members of both communities. + + + Motivation + + + Both Sushi and Gnosis are DAO’s and teams committed to building decentralized products + enabling the future of open finance. + + + It has been quite impressive to see the strong community that has formed around + Sushi, and the GnosisDAO would benefit from feedback and participation from the + Sushi community in order to explore future synergies between our products. + + + As a precedent for this and future collabs, we are currently running this joint + grant program -> https://blog.gnosis.pm/introducing-the-gnosis-safe-sushiswap-grant-f2e597c6d6cb + + + A grant has already been accepted to build a Sushiswap interface inside the Gnosis + Safe’s app store. + + + Specification + + + Pay 700 GNO to liquidity providers on the Sushiswap GNO<>ETH pool with address 0x41328fdba556c8c969418ccccb077b7b8d932aa5 + throughout one month after the proposal has been passed. + + + With the above, we can achieve: + + + - Creating stakeholders for both communities + + - Foment cross-DAO collaborations in the future + + - Increase GNO liquidity + + + Implementation + + + Members of the Gnosis team will develop a DuneQuery that can help track the addresses + that staked GNO<>ETH LP tokens on the MasterChefSushi contact. + + + This will enable the DAO to distribute the GNO reward via the SafeAirdrop app, and + avoid using the “deposit directly to LP contract” method. This will avoid: + + + - Price depreciation for GNO on the LP pair + + - Eliminate people that only deposit to frontrun before the reward is distributed + (not real LPs) + + + Details of the reward + + + - 700 GNO will be distributed to GNO<>SUSHI LP providers that stake their token + on the MasterChef LP Staking Pool (0xc2edad668740f1aa35e4d8f227fb8e17dca888cd) for + one month + + - The eligible period for the reward will start on 0:00 (GMT) of the day after the + phase 3 proposal passes on Snapshot, and will end 30 days later + + After the period has concluded, the Gnosis DAO will use the SafeAirdropApp to distribute + the tokens to all eligible addresses + + - A retrospective post on forum will show the impacts of this proposal and start + a discussion regarding possible repetitions in the future' +start: 1614337200 +end: 1614855600 +state: closed +author: '0xE5243348383f38a44DF70dD8140A4f44F942236e' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 53635.42061785053 +scores: + - 33434.33557352095 + - 20201.08504432958 + - 0 +votes: 42 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-70.yml b/public/GIPs/GIP-70.yml new file mode 100644 index 00000000..b05d8708 --- /dev/null +++ b/public/GIPs/GIP-70.yml @@ -0,0 +1,37 @@ +id: '0xbdc138180bec423df7b1d84c3ff4a85f3d1b62efba5db8f88a29bee2c4e515bb' +gip_number: '70' +url: https://snapshot.org/#/gnosis.eth/proposal/0xbdc138180bec423df7b1d84c3ff4a85f3d1b62efba5db8f88a29bee2c4e515bb +title: Should GnosisDAO pass a Grant Proposal to partner with Gateway.fm? +body: "Gateway.fm is a distributed blockchain infrastructure company. Our mission\ + \ is to provide enterprise-grade blockchain infrastructure at scale, distributed\ + \ around the world, in a portable way. \n\nGateway.fm team should be supported with\ + \ a significant grant of 1mil DAI upfront, 2mil DAI and 20k GNO vested over 3 years\ + \ allowing us to focus on the Gnosis Chain. The vested GNO should be used for staking\ + \ on the Gnosis Beacon Chain and should only be able to be sold three years after\ + \ the agreement is in place. Gateway.fm's contributions will include but are not\ + \ limited to the following milestones: https://forum.gnosis.io/t/gip-70-should-gnosisdao-pass-a-grant-proposal-to-partner-with-gateway-fm/6079\n\ + \nApart from that, Gateway.fm team will be happy to support Gnosis Chain in achieving\ + \ any future goals that are within the team’s competence and we will be closely\ + \ embedded with the Gnosis teams to secure a successful path forward on the direction\ + \ of new development of the Gnosis Chain." +start: 1666805533 +end: 1667410333 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 190228.89158789066 +scores: + - 190039.00946930825 + - 88.56586397877427 + - 101.31625460378928 +votes: 776 +quorum: 0 +funding: + amount: 3,020,000 + currency: DAI and GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-71.yml b/public/GIPs/GIP-71.yml new file mode 100644 index 00000000..c2cc43f4 --- /dev/null +++ b/public/GIPs/GIP-71.yml @@ -0,0 +1,49 @@ +id: '0x481ff5ef01d75eb1798c651351c2a9e6c0d7d991a063399eb255e676c92b9bad' +gip_number: '71' +url: https://snapshot.org/#/gnosis.eth/proposal/0x481ff5ef01d75eb1798c651351c2a9e6c0d7d991a063399eb255e676c92b9bad +title: 'Should GnosisDAO support hosted Blockscout explorer for Chiado testnet? ' +body: 'Chiado testnet is an important new part of the Gnosis ecosystem as a developer + testnet. A reliable explorer is required for developers to be productive on Gnosis. + A Blockscout instance should be set up as soon as possible to support Chiado now + and into the future. This instance will rely on a dedicated node supported by Gateway. + Gateway is already working with Chiado and can quickly spin up and support the required + node infrastructure and RPC endpoint. + + + To expedite the process, which is necessary as the merge is coming very quickly, + we are proceeding directly to phase 2. In case this proposal is supported by Gnosis + community, Blockscout team is ready to prioritize this integration, and will try + to launch the instance within one month after passing the proposal. We’ll plan for + minimal branding based on the current Gnosis Chain explorer with monochrome colors + to differentiate Chiado. The instance will be hosted at https://blockscout.com/gnosis/chiado + 4. + + + As detailed in GIP-54 1, costs for hosting additional instances are $50,000 annually + and cover high-capacity bandwidth, infrastructure upgrades, and data storage for + the network. Feature enhancements and priority support are also included. + + + Payment should be made to BlockScout’s Ethereum mainnet 0xAddress 0x242ba6d68FfEb4a098B591B32d370F973FF882B7 + in $BOB tokens.' +start: 1668054110 +end: 1668658910 +state: closed +author: '0xf8C9e2C80036B3e7730De575e3053f3c6539A345' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 116116.18646314762 +scores: + - 115986.36645591247 + - 64.72246694897333 + - 65.0975402862002 +votes: 1196 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-72.yml b/public/GIPs/GIP-72.yml new file mode 100644 index 00000000..85a7de69 --- /dev/null +++ b/public/GIPs/GIP-72.yml @@ -0,0 +1,133 @@ +id: '0x4c2453deefd3b5de955ecde254f55b31a52dcff1b220a48343dffa7e1af4f788' +gip_number: '72' +url: https://snapshot.org/#/gnosis.eth/proposal/0x4c2453deefd3b5de955ecde254f55b31a52dcff1b220a48343dffa7e1af4f788 +title: Should GnosisDAO fund Common Ground to support onboarding DAOs to the Gnosis + Chain Ecosystem? +body: "## Simple Summary\nThis proposal would fund [Common Ground](https://www.commonground.cg/),\ + \ the all-in-one communication & governance platform for DAOs & Communities. Built\ + \ as a public good, Common Ground supports the onboarding of DAOs and web3 communities\ + \ to the Gnosis Chain ecosystem.\n\n## Abstract\nIn May 2022, Common Ground launched\ + \ a closed alpha that onboarded over 90 communities by now including MetaCartel\ + \ Ventures DAO, Radicle, Giveth, and Outlier Ventures. These communities selected\ + \ us to provide their members with a more secure, web3 native communication and\ + \ coordination platform. \n\nWe are uniquely positioned to introduce DAOs and web3\ + \ communities to the Gnosis Chain ecosystem. Our current and future features like\ + \ token-gating, on-chain governance voting, and token issuance act as entry points\ + \ for the Gnosis Chain ecosystem. We recently bridged our Governance Token to Gnosis\ + \ Chain to reduce transaction costs and improve speed. In the coming months, we\ + \ plan to launch a public beta of our badge system that could be a great introduction\ + \ to a more formal Gnosis Chain integration on Common Ground.\n\nTest the closed\ + \ alpha yourself with [this referral link](https://app.commonground.cg/?ref=gnosis)\n\ + Common Ground will enter public alpha soon™\n\nWe are seeking a USD 50,000 grant\ + \ from GnosisDAO to further support onboarding DAOs and web3 communities to Gnosis\ + \ Chain by making it the default EVM in all our web3 tooling features. Our goal\ + \ is to establish trust and build our track record with GnosisDAO to explore larger\ + \ opportunities in the future.\n\n## Motivation/Rationale\nEvery web3 community\ + \ relies on communication and coordination to accomplish its goals in a decentralized\ + \ manner. The core of these activities occur on web2 platforms that are not designed\ + \ for web3 use cases. \n\nWe built Common Ground to address three core communication\ + \ and coordination pain points that web3 communities face:\n\n* Web3 native: Our\ + \ platform is built for web3 communities and their members. We plan to integrate\ + \ WalletConnect into our platform so communities can implement features like token-gating,\ + \ on-chain governance votes, token issuances, and airdrops. Members can craft their\ + \ profiles by connecting multiple wallets, showcasing their NFT collection, and\ + \ building their on-chain reputations. \n\n* Security: Community and user safety\ + \ is one of the top priorities for our platform. We introduced core features like\ + \ token-gating so communities don’t need to install bots and third-party apps. We\ + \ also introduced the concept of “human-gating” which allows communities to restrict\ + \ read or write-access to channels to verified humans. Users may opt to verify as\ + \ a human through our partnership with Fractal. This functionality unlocks our ability\ + \ to develop a full-grown Web of Trust that ensures the integrity of all social\ + \ interaction on our platform and can be utilized by other projects in the Gnosis\ + \ ecosystem.\n\n* Onboarding: Communities thrive when they have a frictionless,\ + \ user-friendly onboarding experience. We built our own content management system\ + \ to allow communities to create content flows catered to onboarding, announcements,\ + \ and more. Current and prospective members can easily read the latest announcement\ + \ as well as in-depth articles, learn more about the community, and rapidly onboard\ + \ without searching across multiple platforms for information. \n\nThese core features\ + \ are why web3 communities love our platform and will use our platform for on-chain\ + \ activities like token issuance, governance voting, and airdrops. Our comprehensive\ + \ communication and coordination platform stands to introduce communities to Gnosis\ + \ Chain, Safe, and the broader Gnosis ecosystem. \n\n### **How Common Ground Onboards\ + \ DAOs to Gnosis Chain Ecosystem**\nCommon Ground creates multiple opportunities\ + \ to drive awareness and onboard communities to the Gnosis Chain ecosystem. Currently,\ + \ our governance token and token-gating feature introduce communities and users\ + \ to Gnosis Chain. In the future, our on-chain governance voting, token issuance,\ + \ and more will drive communities directly to Gnosis Chain. \n\nCurrently, a major\ + \ part of the liquid supply of our governance and fee tokens is maintained on Gnosis\ + \ Chain. We are also already issuing our community governance NFTs on Gnosis Chain.\ + \ As we continue to develop our platform and require it for many on-chain transactions,\ + \ communities and their members will discover Gnosis Chain. This serves as one of\ + \ the earliest touch points into the Gnosis ecosystem. \n\nIn the future, these\ + \ are three of the major paths we envision that will onboard communities and DAOs\ + \ into the Gnosis Chain ecosystem.\n\n#### Web3 Communities\nCommunities are the\ + \ precursor for many successful DAOs. As more and more communities explore the power\ + \ of web3 and DAOs, they will look for guidance and tooling that frictionlessly\ + \ onboard them. We’re building Common Ground with this major use case in mind by\ + \ developing tooling for companies to easily launch a governance token, implement\ + \ on-chain voting, and handle mass airdrops to existing members. \n\nCommon Ground\ + \ is positioned to be the trusted source to transition communities into DAOs as\ + \ the communication and coordination layer for them. In all our tooling, we can\ + \ place Gnosis Chain as the default EVM that will drive awareness and adoption of\ + \ Gnosis Chain. Our communities will appreciate the low transaction fees, high speeds,\ + \ and safe bridging onto Gnosis Chain. This will likely motivate them to explore\ + \ the Gnosis ecosystem further.\n\n#### Existing DAOs\nCommon Ground addresses some\ + \ of the core pain points that growing DAOs experience – onboarding, on-chain governance\ + \ voting, and security. These features attracted our core user base for our closed\ + \ alpha and contribute to consistent applications for our closed alpha. As DAOs\ + \ continue to adopt our platform, we have the opportunity to introduce and onboard\ + \ them to Gnosis Chain. \n\nDAOs strive for on-chain governance but hesitate due\ + \ to Mainnet transaction costs. Our future governance feature allows DAOs to streamline\ + \ on-chain voting and improve engagement while reducing transaction costs by leveraging\ + \ secondary chains. This is one of the key areas where we can onboard DAOs into\ + \ the Gnosis Chain ecosystem. We can place Gnosis Chain as the default EVM to make\ + \ use seamless. \n\nCommon Ground serves as an onboarding platform for the Gnosis\ + \ Chain Ecosystem. Our tooling introduces and onboards communities and DAOs seamlessly.\ + \ We have the ability to raise awareness and grow the DAO community on Gnosis Chain.\n\ + \n#### Web2 Communities & Users\nThere are hundreds of thousands of communities\ + \ that may investigate more formal governance and DAO structures in the future.\ + \ We want to make onboarding these communities seamless by developing a knowledge\ + \ repository about web3 that features helpful articles, how-to videos, and more.\ + \ \n\nCommon Ground would feature Gnosis Chain as the default chain in its educational\ + \ articles and how-to videos. This would introduce communities to the Gnosis ecosystem\ + \ to drive the adoption of Gnosis Chain, Safe, and more.\n\n## Specification\nCommon\ + \ Ground will deliver governance and token issuance features to support onboarding\ + \ communities and DAOs onto Gnosis Chain. We will place Gnosis Chain as the default\ + \ EVM for each of these features.\n\n#### Deliverable #1: Integrated Governance\ + \ Features\n\n* Expected Completion Date: Mid Q1 2023\n* Estimated Budget: $25,000\n\ + * Features:\n * On and Off-chain voting with native UI\n * Polls and temperature\ + \ check tooling\n * Multiple voting systems (e.g. single choice, approval voting,\ + \ quadratic voting)\n * Discussion tools for the governance proposal process\n\ + \ * Snapshot integration\n * Chain picker with Gnosis as the default chain\n \ + \ * Documentation with text and video tutorials\n\n#### Deliverable 2: Integrated\ + \ Token Issuance\n\n* Expected Completion Date: End of Q1 2023\n* Estimated budget:\ + \ $25,000\n* Features:\n * Native UI\n * Default smart contracts for the most\ + \ common token standards (e.g. ERC20, ERC721, ERC1155)\n * Integration of best\ + \ practice solutions for the most common token features (e.g. vesting, time-locking,\ + \ liquidity providing, etc)\n * Chain picker with Gnosis as the default chain\n\ + \ * Documentation with text and video tutorials\n\n## Fund Dispersal\nThe funds\ + \ will be managed and deployed by the Common Ground DAO multi-sig wallet. The signers\ + \ on the wallet are the board members of the Common Ground Association as well as\ + \ trusted core team members. Leftover funds will be deployed towards general improvements\ + \ of the overall platform in terms of security, scalability and useability." +start: 1671196366 +end: 1671801166 +state: closed +author: '0x37F1fE0C626Ab737db7B816bBA4Be91C838f88c2' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 4566.367206936195 +scores: + - 388.7188236838748 + - 129.38595604160238 + - 4048.262427210716 +votes: 556 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-73.yml b/public/GIPs/GIP-73.yml new file mode 100644 index 00000000..59396e06 --- /dev/null +++ b/public/GIPs/GIP-73.yml @@ -0,0 +1,50 @@ +id: '0x701e81c3876b0dec446af578ef588c3463d2eeb077ad0afa9c03babf2bc6f435' +gip_number: '73' +url: https://snapshot.org/#/gnosis.eth/proposal/0x701e81c3876b0dec446af578ef588c3463d2eeb077ad0afa9c03babf2bc6f435 +title: Should GnosisDAO give a grant to Pluser? +body: 'Website: https://www.pluser.io/ + + + # Introduction + + The collapse of FTX showed that we can’t trust a centralized exchange. But currently, + there is no simple and safe non-custodial alternative for keeping crypto, investing, + and using web3. We want to show you our solution to the problems of cryptocurrency + wallets. + + + # Summary + + We would like to ask for a grant for the amount of 50000 USD/DAI from Gnosis DAO + to create Pluser wallet. Pluser is the safest and simplest cryptocurrency wallet + for the retail market on Gnosis Chain. Our wallet is built on top of Gnosis Safe + contracts, Chainlink oracles, and Torus network. + + + **Read more [here](https://forum.gnosis.io/t/gip-73-should-gnosisdao-give-a-grant-to-pluser/6210)** + + + + + ' +start: 1670341885 +end: 1670946685 +state: closed +author: '0x000f4ae7700afDE47C3b14D22883b4e7808F0e58' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 4707.200158730945 +scores: + - 204.33282591990672 + - 774.3120577979993 + - 3728.5552750130432 +votes: 895 +quorum: 0 +funding: + amount: '50000' + currency: USD/DAI + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-74-redo0.yml b/public/GIPs/GIP-74-redo0.yml new file mode 100644 index 00000000..a53a1e57 --- /dev/null +++ b/public/GIPs/GIP-74-redo0.yml @@ -0,0 +1,29 @@ +id: '0xccbc22aa9a506bee8bed466d12424d5678f0bdb38f267980af281c7826680c0f' +gip_number: '74' +url: https://snapshot.org/#/gnosis.eth/proposal/0xccbc22aa9a506bee8bed466d12424d5678f0bdb38f267980af281c7826680c0f +title: Allow sGNO holders to vote and be included in the upcoming airdrops +body: 'This proposal is for allowing stakewise (sGNO ) vote for all the future propossals + with the on going proposal for safe token + + ' +start: 1671350096 +end: 1671954896 +state: closed +author: '0xbcd69Ce8027b930c7712290F4f0c1e8864382123' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 8784.090348560854 +scores: + - 1146.838625390932 + - 4080.695745181683 + - 3556.555977988236 +votes: 564 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-74.yml b/public/GIPs/GIP-74.yml new file mode 100644 index 00000000..02f8ca0c --- /dev/null +++ b/public/GIPs/GIP-74.yml @@ -0,0 +1,66 @@ +id: '0x668ad502b088d88e55aef4de530437d6ba227fb855d72ee13044d17ce6c362a7' +gip_number: '74' +url: https://snapshot.org/#/gnosis.eth/proposal/0x668ad502b088d88e55aef4de530437d6ba227fb855d72ee13044d17ce6c362a7 +title: Should GnosisDAO support Gnosischa.in Explorer hosted by beaconcha.in? +body: "**Gnosischa.in** by beaconcha.in\n\nhttps://forum.gnosis.io/t/gip-74-should-gnosisdao-support-gnosischa-in-explorer-hosted-by-beaconcha-in/6228/2\n\ + \n**Description**\n\nGnosischa.in is an open source explorer that provides users\ + \ with an easy and accessible way to explore the gnosis-chain. Our explorer is designed\ + \ to be user-friendly, making it accessible to non-technical users. In addition\ + \ to our web-based explorer, we also offer an open source mobile app for iOS and\ + \ Android, providing users with the ability to monitor their validators on the go.\n\ + \nOur goal is to make it easy for anyone to access and understand the data on the\ + \ gnosis-chain, regardless of their technical expertise.\n\nGnosischa.in will be\ + \ maintained by bitfly which also operates beaconcha.in, Ethermine Staking, Ethpool\ + \ and several mining pools.\n\nWe have a deep understanding of the challenges and\ + \ opportunities in this space and are confident in our ability to deliver value\ + \ to users of the gnosis chain.\n\n**Project Details**\n\nGnosischa.in – One of\ + \ our key features is the integration of both the consensus layer and the execution\ + \ layer in a single explorer. This allows users to easily access and analyze data\ + \ from both layers, providing a more comprehensive view of the gnosis chain.\n\n\ + In addition to that, it has a mobile app for stakers to monitor their validators\ + \ & machines.\n\n**Product Features**\n\nBeaconcha.in's first-party integration\ + \ with its ecosystem will enable current beaconcha.in premium users to access premium\ + \ features on the mobile app, as well as API access to gnosischa.in and vice versa.\n\ + \n**General**\n\n * Open Source (GNU General Public License v3.0)\n * Supports\ + \ Execution Layer and Consensus Layer\n * Supports multiple networks\n * Written\ + \ in Golang\n * Visualization of blocks and epochs\n * Public API endpoints\n\ + \ * Dashboard for validator monitoring\n * Various tools to export income for\ + \ tax purposes\n * Client Metric exporter for mobile monitoring\n\n**Website**\n\ + \ * Validator Dashboard with status, income, balance, attestations, proposals and\ + \ charts\n * Overviews about blocks, slots, epochs, transactions, validators, slashings\ + \ and the mempool \n * Leaderboards about validators and deposits\n * Charts about\ + \ various network stats\n* Monitoring\n * The monitoring feature analyzes blockchain\ + \ data and (optionally) data provided by a user's staking setup\n * Highly configurable\ + \ notifications and notification channels\n(mobile push, email, webhooks)\n\n**Tools**\n\ + \ * APIs for Execution Layer and Consensus Layer\n * Income History\n * Profit\ + \ Calculator\n * Block Visualizer\n * Unit Converter\n * Graffiti Wall\n\n**Beaconcha.in\ + \ Mobile App Integration**\n * Open Source (GNU General Public License v3.0)\n\ + \ * Dashboard with similar info as the website\n * Notifications about client\ + \ updates\n * Machine stats with charts\n * Widgets\n * Themes\n\n**Funding &\ + \ Disbursement**\n\nHosting costs cover high-capacity bandwidth, infrastructure\ + \ upgrades, data storage and maintenance.\n\nAmount is paid up front for the year\ + \ and can be renewed annually. Payment can be made to beaconcha.in’s Gitcoin address\ + \ 0x9d4E94dB689Bc471E45b0a18B7BdA36FcCeC9c3b in USDT/USDC/GNO ERC20.\n\n$250,000\ + \ annually\n60% in USDT/USDC - $150k in USDC/USDT\n40% in GNO - $100k in GNO (2\ + \ Year lockup)" +start: 1672916217 +end: 1673521017 +state: closed +author: '0xD67952D9a8F27003De7C94D4A76191831165C01C' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 78105.29993206884 +scores: + - 77804.0133376787 + - 247.16184695054628 + - 54.12474743958712 +votes: 620 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-75.yml b/public/GIPs/GIP-75.yml new file mode 100644 index 00000000..39265d90 --- /dev/null +++ b/public/GIPs/GIP-75.yml @@ -0,0 +1,87 @@ +id: '0xe051f12c56d14985f6851e179feae8c8c40f7c7702df3f58affbb2a67641eebf' +gip_number: '75' +url: https://snapshot.org/#/gnosis.eth/proposal/0xe051f12c56d14985f6851e179feae8c8c40f7c7702df3f58affbb2a67641eebf +title: Should GnosisDAO retroactively fund POKT-powered Public RPC endpoints for Gnosis + Chain pruned and Gnosis Chain archival? +body: "https://forum.gnosis.io/t/gip-75-should-gnosisdao-retroactively-fund-pokt-powered-public-rpc-endpoints-for-gnosis-chain-pruned-and-gnosis-chain-archival/6363\n\ + \nSummary\n\nPocket Network is a decentralized, middleware protocol focused on the\ + \ RPC layer. Our goal is to provide blockchain application developers with a privacy-preserving,\ + \ multi-chain gateway on top of the Pocket Network protocol that allows dapp developers\ + \ to mint reliable, fast RPC endpoints for the 40+ blockchain networks supported,\ + \ including both Gnosis Chain pruned and Gnosis Chain archival.\n\nOver the last\ + \ month, Gnosis Chain has carved the number 2 spot in terms of requests per day\ + \ at 195M daily avgerage requests according to POKTscan!\n\nAbstract\n\nBy sponsoring\ + \ a pokt-powered Public Gnosis Chain RPC endpoint, GnosisDAO and Pocket Network\ + \ would continue to contribute to the decentralization, increased resiliency, and\ + \ censorship-resistance of the Gnosis Chain network. All the while, continuing to\ + \ incentivize Gnosis Chain node runners with $POKT tokens for serving Gnosis dapps.\n\ + \nPublic RPCs are a public good, we hope to share in the responsibility together\ + \ with the GnosisDAO of maintaining these high-quality public goods on behalf of\ + \ Gnosis Chain users. The Pocket Network team and community have been a long-time\ + \ supporters of the Gnosis Chain.\n\nWe’re proud to continue supporting Gnosis!\n\ + \nMotivation\n\nThe current set of Gnosis Relay Chain IDs (RCIs) we suport are:\n\ + \nGnosis Chain = 0027 (mainnet)\nGnosis Chain Archival = 000C (mainnet)\n\nThe POKTdao\ + \ allowlisted Gnosis Chain (0027) on 07/06/21, with Gnosis Chain Archival (000C)\ + \ shortly after on 08/26/21). Since the allowlist date, Pocket node operators earned\ + \ 55.6M POKT from servicing over 38.9B Gnosis Chain mainnet read/write requests.\ + \ \n\nSee this spreadsheet for a breakdown of relays drive and POKT earned:\n\n\ + https://docs.google.com/spreadsheets/d/13q-hebfwWOCeQbWGuAeclOyu5MQk-m-YHot60Kjd94I/edit?usp=sharing\n\ + \nOver that time, these Gnosis RCIs developed to become one of the more populated,\ + \ stable, and higher-performant pools of nodes. Our network of node runners easily\ + \ handled several spikes, including a big spike to 243.6M requests on a single day\ + \ recently in JAN 2023.\n\nAccording to POKTscan, there are currently 22,379 Pocket\ + \ Service Nodes pointing to Gnosis Full Nodes for the 0027 Relay Chain ID and 2,561\ + \ Pocket Service Nodes pointing to Gnosis Archive Nodes for the 000C Relay Chain\ + \ ID. This demonstrates the POKT node incentives at work!\n\nThe POKTdao supported\ + \ node deployment solutions through funding grants such as Node Pilot and DappNode\ + \ to make it super easy to spin up and monetize Gnosis full/archival nodes within\ + \ the Pocket Network protocol.\n\nRationale\n\nPocket Network Inc. staked POKT on\ + \ behalf of the GnosisDAO to subsizie a public good in the form of public RPC endpoints\ + \ (available in the Gnosis Chain docs) without rate limits:\n\nhttps://gnosischain-rpc.gateway.pokt.network\n\ + https://gnosischain-archival-rpc.gateway.pokt.network\n\nWe’ve simplified our model\ + \ this year to mirror a traditional SaaS-like tiered structure, which is much more\ + \ affordable. To sweeten the deal, we are offering the Gnosis DAO team and community\ + \ a massive discount on a 200M requests per day throughput on a 1-year commitment\ + \ with the option to renew on an annual basis:\n\n$135,997 USD for 200M Requests\ + \ Per Day on a 1-year Contract (i.e. next 12 months)\n\nThat represents 4.8x in\ + \ savings (a 480% discount) compared to the original offer!\n\nIn case a buffer\ + \ is wanted/needed, as traffic continues to grow, we’d like to extend another option\ + \ to purchase additional bandwidth at the discounted price of $0.0000018640 per\ + \ request throughout the contract period.\n\nPublic RPCs are a public good, we hope\ + \ to share in the responsibility together with the GnosisDAO of maintaining these\ + \ high-quality public goods on behalf of Gnosis Chain users.\n\nThe GnosisDAO will\ + \ be able to monitor and manage the public RPCs through our Pocket Portal as they\ + \ see fit, including the ability to enable additional security features such as\ + \ allowlisting user-agents, origins, smart contracts, and methods.\n\nImplementation\ + \ (Completed)\n\nIn return, Pocket Network agrees to these milestones and deliverables:\n\ + \ \n![gip75 implementation.PNG](ipfs://bafkreidpfbqybahguw525twv2is43n5uytgqa6tp53fqdbpevf5rubarl4)\n\ + \ \nIf we are unsuccessful in our proposal to secure retroactive funding, PNI\ + \ will continue to support the Gnosis Chain network; however, in an effort to do\ + \ so sustainably, we would introduce per second rate limits on the Public RPC that\ + \ would channel users and developers to our paid tier in the Pocket Portal where\ + \ costs would be passed on directly to Gnosis builders outside the free tier of\ + \ 250k requests per day.\n\nPayment Schedule\n\nPayment Dates & Amount Due\nUpon\ + \ Proposal Passing 50% = $67,998.50 USD\nUpon Milestone Completion 50% = $67,998.50\ + \ USD\nTotal 100% = $135,997 USD\n\nPNI prefers payment in stablecoins, such as\ + \ USDC or DAI, at this provided address -> 0x5F1Feefc4BB7a414096cCF070BeEF94da8Ff88A6" +start: 1677108324 +end: 1677713124 +state: closed +author: '0xa48168C3D73De7B4Fed96383E2BeF8e53443A263' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 13105.02076704456 +scores: + - 12899.032774695732 + - 79.73094204637862 + - 126.25705030245084 +votes: 694 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-76.yml b/public/GIPs/GIP-76.yml new file mode 100644 index 00000000..c34b891e --- /dev/null +++ b/public/GIPs/GIP-76.yml @@ -0,0 +1,59 @@ +id: gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao +gip_number: 76 +url: https://forum.gnosis.io/t/gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao +title: Set up a legal entity controlled and owned by the DAO? +body: "## **Simple Summary**\n\nThis is a proposal to set up a legal entity (in the\ + \ form of an LLC) owned by a Gnosis DAO wallet that enables the GnosisDAO to interact\ + \ with business partners with an incorporated entity.\n\n## **Abstract**\n\nThis\ + \ new legal entity: \n● Can enter into contractual arrangements on behalf of the\ + \ GnosisDAO \n● Can make payments to different service providers that are undertaking\ + \ \nservices on behalf of the GnosisDAO \n● Can hold assets/digital property such\ + \ as patents, copyrights or trademarks \n● Is not owned by a physical person nor\ + \ an official representing the company, \ninstead the legal entity is owned by\ + \ a smart contract address that is \ncontrolled by the GnosisDAO\n\n## **Motivation**\n\ + \nThe GnosisDAO is the decentralized collective steward of the Gnosis ecosystem.\ + \ It is participant managed, and does not have any director or manager. No single\ + \ party is in control. As the GnosisDAO exists entirely on-chain, it is not always\ + \ recognised as an entity with legal personality or limited liability. Some maintain\ + \ that an unincorporated DAO cannot enter into contracts with outside entities,\ + \ hold bank accounts or assets, or make cash payments. In order to be able to function\ + \ in the web2 world, we can create an associated legal entity owned by a smart contract\ + \ address that is controlled by the GnosisDAO.\n\n## **Specification**\n\nTogether\ + \ with OtoCo (see OtoCo - Automated Company Assembly on Blockchain) it is possible\ + \ to create an LLC in Wyoming with a member that is neither a physical person nor\ + \ an official representing a company. Instead, the member can be a smart contract\ + \ address. \nThis is achieved through a so-called Series LLC. A Series has a Master\ + \ and individual Series. Each Series is considered an LLC in its own right, with\ + \ its own name and its own Member(s) independent from the Members of the Master\ + \ LLC and other Series’ Members. Individual Series need a first Member. The first\ + \ Member of a Series LLC can be a smart contract address, using the OtoCo company\ + \ assembly smart contract. \nEach Series LLC is represented by an NFT minted by\ + \ the OtoCo Master contract. Company information, such as the name, is contained\ + \ within the metadata of the NFT, which can be looked up on Etherscan.\n\nTransactions\ + \ can be encoded via payload for a snapshot vote, therefore, transactions do not\ + \ have to be approved manually.\n\nFor further details on the specification, see:\ + \ Part II. The OtoCo Ethereum smart contracts - OtoCo Documentation ([gitbook.io](http://gitbook.io)).\n\ + \n2 Likes\n\n**[next page →](/t/gip-76-set-up-a-legal-entity-controlled-and-owned-by-the-dao/6369?page=2)**\n" +start: 1674210716 +end: null +state: + - phase-2 +author: "Monika \nstatus: Draft\ntype: Meta\ncreated: 2023-01-20\n\n\nSimple Summary\n\ + \nThis is …" +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-77.yml b/public/GIPs/GIP-77.yml new file mode 100644 index 00000000..f837cef9 --- /dev/null +++ b/public/GIPs/GIP-77.yml @@ -0,0 +1,87 @@ +id: gip-77-should-the-gnosisdao-add-delegation-spam-reduction +gip_number: 77 +url: https://forum.gnosis.io/t/gip-77-should-the-gnosisdao-add-delegation-spam-reduction +title: Should the GnosisDAO add delegation & spam reduction? +body: "## Simple Summary\n\nThis proposal aims to introduce a number of changes to\ + \ GnosisDAO’s governance setup which will:\n\n 1. Reduce low-quality and spam proposals\ + \ created in the GnosisDAO’s snapshot space.\n 2. Make GnosisDAO’s influence distribution\ + \ less opaque.\n 3. Improve vote-weight utilization.\n\n\n\n## Abstract\n\nBroadly,\ + \ this proposal aims to introduce two changes:\n\n 1. Modify the criteria for users\ + \ to post proposals to the GnosisDAO’s snapshot space. \n 1. Accounts holding\ + \ ≥ 1 GNO can create a proposal (current).\n 2. Add some trusted moderators that\ + \ have the ability to remove posts that they deem to be low-quality. (new)\n \ + \ 3. Proposals with less than < 1,000 GNO of vote-weight cast `for` or `abstain`\ + \ are filtered from the main view. (new)\n 2. Improve delegation \n 1. Improve\ + \ the delegation UI inside of snapshot to make delegation much simpler and to give\ + \ an overview of the current delegated vote-weight distribution.\n 2. Add a two-year\ + \ term limit to delegation, to avoid stagnation in the vote-weight distribution;\ + \ GNO holders must periodically set their delegation, all delegations expire after\ + \ two-years.\n 3. Allow delegates to decline being delegated to / resign from\ + \ delegation, negating any vote weight delegated to them.\n 4. Allow GNO holders\ + \ to delegate portions of their vote weight to multiple accounts.\n 5. Allow\ + \ for transitive delegation; If A delegates to B and B delegates to C, C inherits\ + \ A’s vote weight.\n 6. Allow delegates to optionally set a cap on the amount\ + \ of vote weight delegated to them.\n\n\n\n## Motivation\n\nPopularized by Compound\ + \ Governor, delegation has proven to be an effective strategy for improving the\ + \ vote-weight utilization in many DAOs; consolidating vote-weight in the hands of\ + \ those who have the time and inclination to actively participate in governance\ + \ by allowing users to delegate their vote weight to others.\n\nLargely due to the\ + \ constraints of calculating vote-weight on-chain, Compound and OZ Governor’s delegation\ + \ is somewhat limited. GnosisDAO’s existing delegation strategy on Snapshot already\ + \ improves on one of these limitations by allowing users to delegate their vote\ + \ weight and also directly participate in any vote. If a user does not cast a vote,\ + \ their vote weight will be applied to the vote cast by their delegate. If a user\ + \ does cast a vote, their vote weight will not count towards their delegates vote\ + \ weight in that proposal.\n\nHowever, there is significant design-space to further\ + \ improve on GnosisDAO’s delegation.\n\nSpecifically, we would like to introduce\ + \ changes that:\n\n 1. Reduce low-quality and spam proposals created in the GnosisDAO’s\ + \ snapshot space.\n 2. Make GnosisDAO’s influence distribution less opaque.\n \ + \ 3. Improve vote-weight utilization.\n\n\n\n[Another recent forum](https://forum.gnosis.io/t/enhancing-transparency-and-efficiency-an-idea-for-the-implementation-of-a-governance-structure-based-on-delegates-in-the-gnosis-ecosystem/6334)\ + \ post also argues for delegation, along with suggesting compensation for delegates.\ + \ To constrain scope, this proposal does not include delegate compensation. However,\ + \ if this proposal is successful, and after observing the delegation setup in production,\ + \ we will likely write a followup proposal to implement some form of delegate compensation.\n\ + \n## Specification\n\nTODO\n\n## Rationale\n\nTODO\n\n## Implementation\n\nTODO\n\ + \n8 Likes\n\n[GnosisDAO proposal spam on Snapshot](https://forum.gnosis.io/t/gnosisdao-proposal-spam-on-snapshot/8042/3)\n\ + \n[GIP-109: Should the GnosisDAO introduce Snapshot moderators to reduce spam?](https://forum.gnosis.io/t/gip-109-should-the-gnosisdao-introduce-snapshot-moderators-to-reduce-spam/8812)\n\ + \n[Do we need this forum and what for?](https://forum.gnosis.io/t/do-we-need-this-forum-and-what-for/7977/8)\n\ + \n[Do we need this forum and what for?](https://forum.gnosis.io/t/do-we-need-this-forum-and-what-for/7977/9)\n\ + \n[GIP-101: Should karpatkey and StableLab Establish a Delegate Program v0 for the\ + \ GnosisDAO?](https://forum.gnosis.io/t/gip-draft-establish-gnosisdao-delegate-program-v0/8578/2)\n\ + \n[Karpatkey Delegate Platform](https://forum.gnosis.io/t/karpatkey-delegate-platform/7252)\n" +start: 1674162370 +end: null +state: + - phase-2 +author: 'Gnosis Guild + + status: Draft + + type: Meta + + created: 2023-01-20 + + + poll + + + Simple Summary + + This proposal aims to introduce a number of changes to GnosisDA…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-78.yml b/public/GIPs/GIP-78.yml new file mode 100644 index 00000000..57c51faa --- /dev/null +++ b/public/GIPs/GIP-78.yml @@ -0,0 +1,136 @@ +id: gip-78-gnosis-guild-treasury-allocation-proposal-2 +gip_number: 78 +url: https://forum.gnosis.io/t/gip-78-gnosis-guild-treasury-allocation-proposal-2 +title: Gnosis Guild Treasury Allocation (Proposal#2) +body: "## Simple Summary\n\nThe proposal will fund the Gnosis Guild’s operations\ + \ for one year. The Gnosis Guild treasury allocation would continue to foster needs-driven\ + \ development for the GnosisDAO and of the Zodiac ecosystem at a total of $3,823,575\ + \ paid in 56% DAI and 44% GNO for our contributor compensation plan, administered\ + \ by Gnosis Guild following the vesting schedule laid out in the Gnosis token plan.\n\ + \n## Abstract\n\nGnosis Guild is a society dedicated to interdependent software\ + \ and the growth of the Zodiac Standard. In 2022, Gnosis Guild completed a year\ + \ of needs-driven development for the GnosisDAO and continued to grow the Zodiac\ + \ ecosystem. With this proposal, Gnosis Guild requests funding to continue its development\ + \ of GnosisDAO’s infrastructure, expand the Zodiac collection of tools, and further\ + \ establish Gnosis Chain as an ideal ecosystem for DAOs. The budget allocation includes\ + \ funds for key personnel, operations, grants programs, and other areas as needed\ + \ to sustain this commitment.\n\n## Motivation\n\nWe are a small, but growing,\ + \ team rooted in conviviality, mutualistic ownership, and experimentation. Since\ + \ our last proposal, a year ago, we have completed many projects focused in 4 main\ + \ areas: supporting GnosisDAO, developing novel treasury management tools, developing\ + \ the Zodiac ecosystem, and convivial software experiments.\n\nAn effective and\ + \ productive DAO implicitly spreads the technology on which it’s built; this is\ + \ the core of our symbiotic relationship with GnosisDAO, and by extension, Gnosis\ + \ Chain. In these early days of our organization, it is important to demonstrate\ + \ the effectiveness of Zodiac by supporting Gnosis’s efforts to promote decentralized\ + \ infrastructure. In the past year we have completed:\n\n * [GnosisDAO SAFE Distribution\ + \ Tooling](https://claim-safe.gnosis.io/)—a system to transparently calculate, distribute,\ + \ and claim the portion of SAFE tokens vested to GNO holders.\n * [GIP 28 & 44:\ + \ Allow GNO holders to vote with invested/staked/locked positions in Mainnet/GC](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/18)—We\ + \ deployed a significant upgrade to the GnosisDAO’s governance structure, allowing\ + \ GNO, LGNO, and MGNO on Mainnet and Gnosis Chain to participate in voting.\n *\ + \ [Reality Module Improvements](https://github.com/gnosis/zodiac-module-reality)—We\ + \ have made significant improvements to the Reality Module used for GnosisDAO’s\ + \ governance.\n * [CowSwap Locking Contract](https://forum.gnosis.io/t/candidate-deployment-of-cow-vesting-contracts-for-those-who-locked-gno/4208)—A\ + \ GNO locking contract, for CoW Protocol, for calculating $COW that will be awarded\ + \ to GNO holders that lock their GNO\n\n\n\nGnosis has one of the most productive\ + \ DAO treasuries, due to Karpatkey’s skillful management. Our tooling plays a key\ + \ role in their day to day activities, and was a core component to Karpatkey winning\ + \ the bids to manage Balancer’s and ENS’s treasuries. By supporting the effective\ + \ management of Gnosis’s treasury, we help ensure the long term support of Gnosis\ + \ Chain. In the past year we have built:\n\n * [Zodiac Roles Module](https://github.com/gnosis/zodiac-modifier-roles)\ + \ —The Roles Module enables enforced granular, role-based, permissions for attached\ + \ modules. In combination with the Pilot App, [Karpatkey has utilized these tools](https://medium.com/karpatkeydao/framework-for-an-active-dao-treasury-execution-a30b0b287bb8)\ + \ to securely manage treasury funds in a non-custodial way, and was a key factor\ + \ in their successful ENS treasury bid. Version 2 of the roles mod will allow for\ + \ even greater granularity and modularity.\n * [Pilot ](https://pilot.gnosisguild.org/)Extension\ + \ — The Pilot Extension allows a treasury management team to build a batch of transactions,\ + \ simulate them and queue them as a transaction on any Safe, whether it is using\ + \ Zodiac modules or not.\n * [Zodiac Siphon Module](https://github.com/gnosis/zodiac-module-siphon)—\ + \ This MEV friendly module allows any Safe to make funds transferable from a money\ + \ market into a debt position when undercollateralized. Karpatkey will use this\ + \ to service Maker debt requirements (once audit is complete) .\n\n\n\nThe Zodiac\ + \ ecosystem continues to grow, both culturally and in toolset. Deployed on Gnosis\ + \ Chain (and other EVM compatible chains), our collection of open source modules\ + \ sees regular contributions and use. Zodiac tooling combined with cheap and fast\ + \ transactions make Gnosis Chain the optimal place for DAOs. This year Zodiac has\ + \ expanded with these developments:\n\n * [Zodiac Wiki](https://zodiac.wiki/index.php/ZODIAC.WIKI)\ + \ — This wiki is home to a shared library of reading materials, documentation, stories,\ + \ and a pattern language describing common problems and offering practical responses\ + \ for DAOs.\n * [Zodiac Exit Mod and App](https://github.com/gnosis/zodiac-module-exit)\ + \ — This mod allows specified token holders to redeem a designated token for a portion\ + \ of a Safe’s fungible assets.\n * Zodiac [Governor Mod](https://github.com/gnosis/zodiac-module-oz-governor)\ + \ — This makes Governor style DAOs Safe compatible, bringing the security and flexibility\ + \ of the Safe to the most popular on-chain governance method.\n * [MolochDAO](https://daohaus.substack.com/p/6991f40b-3931-47ff-bea3-fa6f9c365135?s=r)s\ + \ can now control Safes— DAOHaus made their minion contracts Zodiac compatible.\n\ + \n\n\nWith this treasury allocation, Gnosis Guild will continue to carry out needs-driven\ + \ development for GnosisDAO’s infrastructure, executing on emergent GIPs and DAO\ + \ requirements as we have demonstrated the past year. Furthermore, we will continue\ + \ to serve Gnosis Chain’s DAO ecosystem growth by expanding the Zodiac collection\ + \ of tools and the Zodiac Wiki. We will also continue our partnership with Karpatkey\ + \ to serve GnosisDAO’s treasury management.\n\nIn 2023/2024, Gnosis Guild plans\ + \ to complete its spin out from Gnosis Ltd/Gnosis Services GmbH, forming a separate\ + \ entity based on mutualistic ownership and decentralized governance. The Gnosis\ + \ Guild entity will continue with the same team, objectives, and values, executing\ + \ on this GIP and our symbiotic relationship with GnosisDAO. This grant will be\ + \ made to Gnosis Ltd., and once the spin out is complete all grant assets will be\ + \ transferred to the Gnosis Guild entity.\n\n## Specification\n\n[Gnosis Guild\ + \ Treasury Budget 2023](https://docs.google.com/spreadsheets/d/1qyXGxCAk2GmiH4jz7tbtOIqNO6PBxghMQ3lsLZbMz7o/edit?usp=sharing)\n\ + \n## Rationale\n\nGnosis Guild’s chief priority in 2023 remains needs-driven development\ + \ for the GnosisDAO and other DAOs within or engaged by the Gnosis ecosystem, along\ + \ with expanding the suite of composable DAO tooling and mechanisms available for\ + \ the Ethereum and Gnosis ecosystems. Keeping that in mind, the Gnosis Guild treasury\ + \ allocation budget has the following categories with their rationale described\ + \ below:\n\nCore Contributors: This budget category refers to the salaries and token\ + \ plan for 15 full-time contributors with the following roles\n\n * 1 communications\ + \ and community role\n * 1 operations role\n * 1 business development role\n \ + \ * 12 engineering and product roles\n\n\n\nThe contributor incentivization plan\ + \ is intended to roughly double contributors’ salary, with an initial two-year cliff\ + \ followed by a rolling one-year holding period.\n\nStewards: This budget category\ + \ refers to the part-time payment for 2-4 “pod” roles to extend outreach, education,\ + \ and documentation of the Zodiac ecosystem, as well as assist with general community\ + \ and communications needs related to Gnosis Guild.\n\nBrand Design: This budget\ + \ category refers to contract-based payment for visual communications.\n\nGrants\ + \ Program: This budget category refers to the amount allocated to support initiatives\ + \ building on Zodiac and related DAO tooling.\n\nOps: This budget category refers\ + \ to operational costs related to administration, services, and subscriptions.\n\ + \nCultural Program: This budget category refers to what would traditionally be construed\ + \ as a marketing campaign. The cultural program is intended to further establish\ + \ Gnosis Guild’s reputation as a creative, editorial, and experimental team, while\ + \ seeking to meaningfully broaden discourse.\n\n16 Likes\n" +start: 1675037477 +end: null +state: + - phase-2 +author: 'Gnosis Guild + + status: Draft + + type: Funding + + created: 2023-01-30 + + + poll + + + Simple Summary + + The proposal will fund the Gnosis Guild’s operations for one year. T…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 3,823,575 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-79.yml b/public/GIPs/GIP-79.yml new file mode 100644 index 00000000..8b90d944 --- /dev/null +++ b/public/GIPs/GIP-79.yml @@ -0,0 +1,79 @@ +id: gip-79-should-pluser-integrate-gnosis-chain-in-mvp +gip_number: 79 +url: https://forum.gnosis.io/t/gip-79-should-pluser-integrate-gnosis-chain-in-mvp +title: Should Pluser integrate Gnosis Chain in MVP? +body: "## Authorization via Seed\n\nTo manage your wallet, you need to store your\ + \ seed phrase securely. The seed phrase is a complex way of authorization. If a\ + \ user loses their seed, they lose their account and assets.\n\n## One seed for\ + \ all devices\n\nUsers can’t control access between devices. If a user has lost\ + \ their device, they can not block it from the account. Whoever gains access to\ + \ the device can access the user’s account. Therefore, the only option is to create\ + \ a new wallet and withdraw all assets there as soon as possible.\n\n## Weak Security\n\ + \nCurrently, security is the responsibility of the user. If the user encounters\ + \ an insecure application, he may lose all his assets.\n\n## No 2FA\n\nIf a user\ + \ encounters a hacker attack, there is no two-factor authentication for defending\ + \ the user’s account.\n\n# Solution\n\n[![Solution](https://forum.gnosis.io/uploads/default/optimized/2X/c/cb407790c61959524e899ba727ef3fded266ac6f_2_690x388.png)\ + \ Solution1600×900 18.3 KB ](https://forum.gnosis.io/uploads/default/original/2X/c/cb407790c61959524e899ba727ef3fded266ac6f.png\ + \ \"Solution\")\n\nPluser is a single account for all web3 apps with authorization\ + \ via email, decentralized 2FA, device manager, and hack protection.\n\nThe user\ + \ can use any web3 application and not worry about security. We thought of everything\ + \ for them. Now they never lose their crypto, NFT, etc. Our solution is entirely\ + \ decentralized, convenient, and secure. It consists of several parts.\n\n## Authorization\ + \ via email\n\nUsers create an account and recover access to an account using email\ + \ and password. It’s simple, and users will never lose access to their accounts.\n\ + \n## Device manager\n\nUsers can manage access for each device. If a user loses\ + \ their device, they can revoke access.\n\n## Hack Protection\n\nIf a user uses\ + \ an unsafe web3 app, Pluser will notify the user about it and block this app.\n\ + \n## Decentralized 2FA\n\nIf hackers attack a user’s account, 2FA will protect\ + \ it.\n\n# Web2/Web3\n\nPluser is a simple and secure way to use web3 applications.\ + \ It’s like **Google Account/Apple ID** but in web3.\n\n[![Web2/Web3](https://forum.gnosis.io/uploads/default/optimized/2X/7/7a0b24043224dc6bcb64eea67157a03b6ee7a057_2_690x388.png)\ + \ Web2/Web31600×900 36.1 KB ](https://forum.gnosis.io/uploads/default/original/2X/7/7a0b24043224dc6bcb64eea67157a03b6ee7a057.png\ + \ \"Web2/Web3\")\n\n# Easy to use\n\n[![1. Create an account via email](https://forum.gnosis.io/uploads/default/optimized/2X/1/1b13a325655d7d2193cfc3c0d48304d13abe1540_2_690x388.png)\ + \ 1\\. Create an account via email1600×900 41.8 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/1b13a325655d7d2193cfc3c0d48304d13abe1540.png\ + \ \"1. Create an account via email\")\n\n[![2. Choose an application in dAppStore](https://forum.gnosis.io/uploads/default/optimized/2X/1/1536ea14556de9279acdcfb86192e2413dbb3245_2_690x388.jpeg)\ + \ 2\\. Choose an application in dAppStore1600×900 165 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/1536ea14556de9279acdcfb86192e2413dbb3245.jpeg\ + \ \"2. Choose an application in dAppStore\")\n\n[![3. Don't worry about security.\ + \ Pluser will protect you.](https://forum.gnosis.io/uploads/default/optimized/2X/f/f9038e184063b037b45c783ec8a709d2be04942d_2_690x388.png)\ + \ 3\\. Don't worry about security. Pluser will protect you.1600×900 195 KB ](https://forum.gnosis.io/uploads/default/original/2X/f/f9038e184063b037b45c783ec8a709d2be04942d.png\ + \ \"3. Don't worry about security. Pluser will protect you.\")\n\n# Market\ + \ Validation\n\n[![Market Validation](https://forum.gnosis.io/uploads/default/optimized/2X/7/7edb9196612ea2c6d0feb842ed907c62f462d928_2_690x388.png)\ + \ Market Validation1600×900 36.3 KB ](https://forum.gnosis.io/uploads/default/original/2X/7/7edb9196612ea2c6d0feb842ed907c62f462d928.png\ + \ \"Market Validation\")\n\n# Comparison\n\n### Terminology:\n\n * **Easy/Complicated**\ + \ \\- Degree of difficulty for a user to create an account and gain access.\n\n\ + \ * **Safe/Unsafe** \\- How much a user needs to think about security and keeping\ + \ access to the wallet.\n\n\n\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/1/15bc77d52364c7e8704ebe05a0439b5adce86aaf_2_690x388.png)\ + \ Comparison1600×900 65.9 KB ](https://forum.gnosis.io/uploads/default/original/2X/1/15bc77d52364c7e8704ebe05a0439b5adce86aaf.png\ + \ \"Comparison\")\n\n# Roadmap\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/0/0140a43e5807c50cdbb2d4df09be0458721c6c5b_2_690x388.jpeg)\ + \ Comparison1600×900 139 KB ](https://forum.gnosis.io/uploads/default/original/2X/0/0140a43e5807c50cdbb2d4df09be0458721c6c5b.jpeg\ + \ \"Comparison\")\n\n# Team\n\n[![Comparison](https://forum.gnosis.io/uploads/default/optimized/2X/6/69eeb8f65f6938f67ec4dadba15e7b33a373e201_2_690x429.jpeg)\ + \ Comparison2386×1486 409 KB ](https://forum.gnosis.io/uploads/default/original/2X/6/69eeb8f65f6938f67ec4dadba15e7b33a373e201.jpeg\ + \ \"Comparison\")\n\n# Grant\n\nWe want to get a $50,000 grant or SAFE investments\ + \ from GnosisDAO. This money will be spent on maintaining the team and developing\ + \ the MVP. Pluser can make the experience of using Gnosis Chain easier and safer.\ + \ It will also help onboarding users from web2.\n\n## GnosisDAO Snapshot\n\n_Phase\ + \ 2 Proposals: Please ignore this section, and leave as is. It is used for Phase\ + \ 3 proposals. \nPhase 3 Proposals: Add a link to the corresponding GnosisDAO Snapshot\ + \ poll you’ve created._\n\n2 Likes\n" +start: 1676552440 +end: null +state: + - phase-2 +author: "elshan.eth\nstatus: phase-2\ntype: Funding\ncreated: 2023-02-16\n\n\nSummary\n\ + \ \nAbout $2 billion we…" +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-8.yml b/public/GIPs/GIP-8.yml new file mode 100644 index 00000000..4a25ad00 --- /dev/null +++ b/public/GIPs/GIP-8.yml @@ -0,0 +1,77 @@ +id: gip-8-enable-lp-token-voting-on-snapshot +gip_number: 8 +url: https://forum.gnosis.io/t/gip-8-enable-lp-token-voting-on-snapshot +title: Enable LP token voting on Snapshot +body: "* Add one LP token voting strategy\n * Add two LP token voting strategies\n\ + \ * Add no LP token voting strategy\n\n\n\n0 voters\n\n# **Which LP token voting\ + \ strategy should be added to Snapshot?**\n\n * Balancer\n * Uniswap\n * SushiSwap\n\ + \n\n\n0 voters\n \n \n GIP: 8\n title: Enable LP token voting on Snapshot\ + \ \n author: Anna George\n status: Draft\n type: Meta\n created: 2021-03-10\n\ + \ \n\nThis is a continuation of the [original post](https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902)\ + \ by [@StefanGeorge](/u/stefangeorge), moving it to phase 2 as the proposal was\ + \ well perceived in the Forum discussion and the technical requirements for implementation\ + \ have been set up in the meantime.\n\n**Tl;dr:**\n\nCurrently, the GnosisDAO Snapshot\ + \ setup does not allow for LP token voting. This forces GNO token holders to decide\ + \ between liquidity provisioning and governance participation.\n\nThis proposal\ + \ suggests adding a LP token voting strategy to the Gnosis Snapshot space. Please\ + \ vote on a) whether you want one / two / no strategy to be added to Snapshot, and\ + \ b) which strategy/ies you would like to have added.\n\n**The Proposal:**\n\nGNO\ + \ locked up in liquidity pools can currently not be used for voting on Gnosis Snapshot\ + \ proposals. This creates a tradeoff for GNO token holders: they can either earn\ + \ yields OR participate in governance decisions. This is concerning for two reasons:\n\ + \n 1. Liquidity providers – usually long term holders – are taking a risk to ensure\ + \ the token remains liquid on the market, enabling new community members to join\ + \ by buying GNO without large slippage. They are providing a service that helps\ + \ the GNO community and should not be punished with having no voting rights.\n \ + \ 2. As briefly touched upon above, it’s in the GnosisDAO’s interest to have large\ + \ liquidity of GNO. Striving for increased liquidity whilst not allowing for LP\ + \ token voting poses a conflict of interest: \nThe more capital is “locked up”\ + \ in liquidity pools without voting being enabled, the less likely it is that GnosisDAO\ + \ votes will meet the required threshold for proposals to pass.\n\n\n\nAt present,\ + \ a large amount of GNO is already used for liquidity provisioning, demonstrating\ + \ the relevance of this proposal:\n\n * 32M in [Balancer](https://pools.balancer.exchange/#/explore?token=0x6810e776880C02933D47DB1b9fc05908e5386b96)\n\ + \ * 8M in [Uniswap](https://info.uniswap.org/pair/0x3e8468f66d30fc99f745481d4b383f89861702c6)\n\ + \ * 0.7M in [Sushiswap](https://app.sushi.com/pair/0x41328fdba556c8c969418ccccb077b7b8d932aa5)\n\ + \n\n\nWhile the Snapshot team developed [strategies](https://snapshot.page/#/strategies)\ + \ that enable LP token voting for all major AMMs, the UI limits the amount of strategies\ + \ that can be deployed to four. As the Gnosis Space already has two strategies enabled\ + \ (‘GNO balance’ and ‘Delegated GNO balance’), only up to two LP token voting strategies\ + \ could be added at this point. There are some arguments in favour of only adding\ + \ one new strategy for the time being in order to keep at least one strategy open\ + \ for future use cases.\n\nThe full list of potential LP token voting strategies\ + \ that are currently relevant to GNO & enabled by Snapshot is added as answer options\ + \ in the poll above. Please decide on which - if any - strategy you would like to\ + \ see enabled in the Gnosis Snapshot space. To review the discussion that has evolved\ + \ since December please check the original post [here](https://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902).\n\ + \n3 Likes\n\n[Should GnosisDAO allow to use GNO locked in balancer pools for voting\ + \ in snapshot proposals?](http://forum.gnosis.io/t/should-gnosisdao-allow-to-use-gno-locked-in-balancer-pools-for-voting-in-snapshot-proposals/902/24)\n\ + \n[GIP-28: Allow GNO holders to vote even if their GNO are invested/staked/locked\ + \ in Smart Contracts in different protocols/networks](https://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/9)\n\ + \n[GIP-28: Allow GNO holders to vote even if their GNO are invested/staked/locked\ + \ in Smart Contracts in different protocols/networks](http://forum.gnosis.io/t/gip-28-allow-gno-holders-to-vote-even-if-their-gno-are-invested-staked-locked-in-smart-contracts-in-different-protocols-networks/2357/2)\n" +start: 1615380566 +end: null +state: + - phase-2 +author: 'Anna George + + status: Draft + + type: …' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-80.yml b/public/GIPs/GIP-80.yml new file mode 100644 index 00000000..94cd2412 --- /dev/null +++ b/public/GIPs/GIP-80.yml @@ -0,0 +1,176 @@ +id: '0xf89c08d03b294e6e891f1f3d74d903e77f364002fde64e9dd463e280c60189a9' +gip_number: '80' +url: https://snapshot.org/#/gnosis.eth/proposal/0xf89c08d03b294e6e891f1f3d74d903e77f364002fde64e9dd463e280c60189a9 +title: Should GnosisDAO fund p2panda's off-chain solution for secure group encryption? +body: "Forum URL: https://forum.gnosis.io/t/gip-80-should-gnosisdao-fund-p2pandas-off-chain-solution-for-secure-group-encryption/6541\n\ + \n## Category\n\nFunding - Rewards\n\n## Executive Summary\n\nHello Gnosis community!\n\ + \nWe would like to realize a prototype for a decentralized, off-chain, encrypted\ + \ group chat where Ethereum addresses can serve as the receiver's identifiers.\n\ + \nTo achieve this we want to improve and build on top of the [Messaging Layer Security\ + \ Protocol](https://messaginglayersecurity.rocks) (MLS) and the [p2panda](https://p2panda.org/)\ + \ protocol. This technology fills a need in the Gnosis community for a generic and\ + \ encrypted off-chain data layer.\n\nThis technology fills a need in the Gnosis\ + \ community for a generic and encrypted off-chain data layer. The group chat will\ + \ also be a proof of concept and template for future applications serving the Gnosis\ + \ community using the same infrastructure.\n\n## Specification\n\n[p2panda](https://p2panda.org/)\ + \ is a new protocol and ecosystem for building decentralised applications with authenticated\ + \ and encrypted data which is automatically stored and synced between computers.\n\ + \nSome of the building blocks of p2panda are a permission system, conflict-free\ + \ replicated data types, multi-key identities, data schemas, multi-writer documents,\ + \ local deletion, sparse replication, dynamic GraphQL queries, hybrid network topologies\ + \ and more.\n\nWhile p2panda aims at being a low-barrier framework to enter the\ + \ p2p space without worrying too much about the technical challenges coming with\ + \ it, we also want to offer a toolbox to build radical applications which work locally,\ + \ offline and both in the browser and on low-energy devices like a smartphone or\ + \ embedded computer.\n\nData is encrypted with the help of the MLS protocol providing\ + \ Double-Ratchet-based group encryption. MLS assures Post-Compromise Security (PCS)\ + \ and Forward Secrecy (FS) and still stays performant for large groups. While MLS\ + \ is capable of working in a decentralised environment it hasn't been explicitly\ + \ specified for it. With p2panda we have all the building blocks to realize MLS\ + \ in a fully decentralised setting.\n\nFor all of this to play nicely together,\ + \ the following implementation steps are planned:\n\n### Secret Groups\n\n_Secret\ + \ Groups_ is the data schema that p2panda uses to handle data encryption for groups\ + \ in a decentralised setting and it builds on MLS as its underlying layer.\n\np2panda\ + \ already contains a low-level API for MLS that we implemented as a precursor for\ + \ the more high-level _Secret Groups_. This low-level API supports two basic usage\ + \ scenarios: Double-Ratchet-based encryption (the MLS default) and a so called \"\ + Long Term Secret\" encryption on top of that. The latter allows group members to\ + \ still decrypt past data after entering the group, which is practical for building\ + \ applications like Wikis. Double-Ratchet-based encryption offers Forward Secrecy\ + \ instead (FS), which can be used for secure chat applications and other use cases\ + \ where new group members should not access past data.\n\nThe next step will be\ + \ building an elegant high-level API that makes this system easily accessible for\ + \ developers that want to integrate _Secret Groups_ in their applications. This\ + \ involves additions to our GraphQL API, p2panda's built-in data schemas and replication\ + \ data format, which are all part of our core protocol specification.\n\n**Further\ + \ Links**\n\n- \"OpenMLS\" MLS implementation in Rust which is used by p2panda:\ + \ https://github.com/openmls/openmls\n- MLS integration in p2panda: https://github.com/p2panda/p2panda/tree/main/p2panda-rs/src/secret_group\n\ + - Draft \"Secret Group\" specification in p2panda: https://p2panda.org/specification/encryption\n\ + \n### Rust and TypeScript libraries\n\nDevelopers will use our Rust and TypeScript\ + \ libraries to integrate p2panda in their applications.\n\nTo persist MLS group\ + \ state we will implement interfaces for some known storage backends developers\ + \ can choose from (SQL, IndexedDB, LocalStorage). To account for forks of diverging\ + \ group state (due to network fragmentation) we need to extend our persistence system\ + \ with an additional layer. This layer keeps past group states for a while to be\ + \ able to decrypt messages from \"forked\" group states. This temporarily weakens\ + \ Forward Secrecy the more fragmented the group state gets.\n\n**Further Links**\n\ + \n- MLS specification (Version 9 February 2023) addressing forked group states:\ + \ https://messaginglayersecurity.rocks/mls-protocol/draft-ietf-mls-protocol.html#section-14\n\ + - OpenMLS Rust crate allowing handling past group epochs w. `max_past_epochs` option:\ + \ https://openmls.tech/book/user_manual/group_config.html\n- Diagram: Handling concurrent\ + \ updates in Secret Groups: https://whimsical.com/concurrent-updates-in-secret-groups-MZdGMKmMJ25zxrDAzuoXGG\n\ + - `p2panda-rs` Rust crate: https://crates.io/crates/p2panda-rs\n- `p2panda-js` npm\ + \ package: https://www.npmjs.com/package/p2panda-js\n\n### Key Groups\n\nThe MLS\ + \ specification does not have a concept of \"moderators\" or \"administrators\"\ + \ in a group. Theoretically all members of the group can mutate its state. p2panda\ + \ _Key Groups_ are a permission layer on top of MLS which allows for decentralised\ + \ permission handling of multi-writer data. Next to permissions they also enable\ + \ multi-device identities.\n\nAs part of this effort we will create an implementation\ + \ of our specification of the _Key Groups_ system, which will be able to model a\ + \ permission system on top of any encrypted group.\n\n**Further Links**\n\n- Draft\ + \ \"Key Group\" specification: https://p2panda.org/specification/authorisation\n\ + \n### External Keys\n\np2panda uses Ed25519 as the Digital Signature Algorithm.\ + \ To allow other DSAs we need to implement a _handshake_ process where external\ + \ identity systems such as an Ethereum key can authorise an MLS group member. This\ + \ will involve adding another data schema to p2panda.\n\n**Further Links**\n\n-\ + \ Diagram: External keys in p2panda: https://whimsical.com/digital-signature-algorithms-EgAkzR7mVDj4BQb7xySahh\n\ + - Schema specification: https://p2panda.org/specification/data-types/schemas#system-and-application-schemas\n\ + \n### POC: Group chat in Circles client\n\nAs a proof-of-concept (POC) we will integrate\ + \ p2panda with MLS into an existing Ethereum application in the Gnosis community.\ + \ Since our team partly consists of the original developers of the Circles ecosystem\ + \ we want to use the current Circles web client to show how Ethereum addresses (Gnosis\ + \ Safe contracts) can be used as receiver addresses for an encrypted MLS chat group.\n\ + \n* Users can associate their Gnosis Safe address (\"Circles profile\") with a p2panda\ + \ key\n* Users can create and manage groups to communicate with a set of other Safe\ + \ addresses\n* Users can access their chats from all of their devices simultaneously\n\ + \n**Further Links**\n\n- Circles website: https://joincircles.net/\n- Circles client:\ + \ https://circles.garden/\n\n### Security Audit\n\nThe OpenMLS team which partly\ + \ consists of the IETF standard editors consulted us already with the correct integration\ + \ of MLS into p2panda. We will continue with this collaboration. To verify our work\ + \ and gather feedback we want to work with Least Authority for a security audit.\ + \ \n\n- OpenMLS: https://openmls.tech/\n- Least Authority: https://leastauthority.com/\n\ + \n## Rationale\n\nScaleable data encryption for large groups in a decentralised\ + \ network is hard and has always involved a trade-off between UX and security. We\ + \ believe that MLS is the first [Internet Engineering Task Force (IETF) standard](https://datatracker.ietf.org/wg/mls/about/)\ + \ to tackle some of these challenges. p2p applications of all kinds, for example\ + \ the Gnosis Safe Apps, will benefit from an off-chain protocol that gives them\ + \ a distributed, strongly encrypted database stack.\n\nOne goal of p2panda's protocol\ + \ design has been enabling both usage from native apps, independent of a stable\ + \ connection to the internet, and immediate access from a plain web browser, without\ + \ having to install any additional software. Additionally, p2panda keeps data portable\ + \ instead of locking it to a specific application or server. Our design works in\ + \ both federated network topologies and fully decentralised systems, both of which\ + \ can be configured depending on the needs of the software and the communities that\ + \ are operating it.\n\nEthereum addresses (EOA and Contract account, for example\ + \ of a Gnosis Safe) are ideal identifiers for applications like a distributed messaging\ + \ platform. They are already established in the community, simplify onboarding and\ + \ enable cross-validation of identities through previous usage of those keys. Protocols\ + \ with centralised registries like PGP/GPG failed here and we believe that Ethereum\ + \ addresses that are native to decentralised networks are much more suitable for\ + \ this task. We want to enable any holder of an Ethereum key to bring their identity\ + \ and access additional tools for the community.\n\n## Budget\n\n- 172.800 DAI -\ + \ Salary for 3x half-time developers over ~12 months (8h / day, 3 days / week, 48\ + \ weeks, 50 DAI / hour)\n- 10.000 DAI - Security Audit Fee\n- 5.000 DAI - Administration\n\ + - 12.200 DAI - Contingency\n\nTotal: 200.000 DAI\n\n## Milestones\n\n**Proposed\ + \ timeline:** 12 months\n\n**Final goal:** Implementation and realisation of specified\ + \ items (see \"Specification\" above)\n\n**Timeline and Success metrics**\n\n- Phase\ + \ 1 - Research & Specification\n Success Metrics - Publicly published Secret Group,\ + \ Key Group and External Keys specification on p2panda.org website and GitHub repository\n\ + \ Time and Price Estimate - 2 month, 28.800 DAI\n- Phase 2 - Implementation Secret\ + \ Groups\n Success Metrics - `p2panda-js` package release on npm with Secret Group\ + \ encryption API and storage provider API\n Time and Price Estimate - 3 months,\ + \ 43.200 DAI\n- Phase 3 - Implementation Key Groups\n Success Metrics - `p2panda-rs`\ + \ crate release on crates.io with Key Group data types. `aquadoggo` node implementation\ + \ release on crates.io handling key groups in materialization logic\n Time and\ + \ Price Estimate - 3 months, 43.200 DAI\n- Phase 4 - Implementation External Keys\n\ + \ Success Metrics - Package release on npm (either `p2panda-js` or external package)\ + \ with External Keys feature\n Time and Price Estimate - 1 month 14.400 DAI\n-\ + \ Phase 5 - POC: Circles Chat\n Success Metrics - Release of encrypted Group-Chat\ + \ in Circles Wallet (either in official circles.garden Website or fork)\n Time\ + \ and Price Estimate - 1 month 14.400 DAI\n- Phase 6 - Security Audit\n Success\ + \ Metrics - Shared results of audit in p2panda GitHub repository, report on required\ + \ refactorings / changes in codebase\n Time and Price Estimate - 1 month 10.000\ + \ DAI (audit) + 14.400 DAI (development)\n- Phase 7 - Documentation + Tutorials\n\ + \ Success Metrics - Published tutorials on how to use Secret Groups, Key Groups\ + \ and External Keys feature on p2panda.org website\n Time and Price Estimate -\ + \ 1 month 14.400 DAI\n\n## Evaluation\n\nA security audit and implementation of\ + \ a POC in a widely-used context like Circles will evaluate the success of this\ + \ undertaking.\n\n## Team & Organisation \n\np2panda is a not-for-profit organisation\ + \ founded in 2021 with the mission to bring an easy to use but radical p2p stack\ + \ to app developers. We received the NGI Pointer grant in 2021/22 and NGI Assure\ + \ in 2022/23.\n\nThe team behind p2panda are experts in p2p, Rust and TypeScript\ + \ development. The founding members are:\n- [adz](https://github.com/adzialocha/)\ + \ has been the core developer next to [isthisa](https://isthisa.com/) developing\ + \ the first version of the Circles UBI community currency, both of them founded\ + \ later the [bitspossessed](https://github.com/bitspossessed/) developer collective\ + \ which still maintains the Circles project\n- [sandreae](https://github.com/sandreae)\ + \ is a Rust developer with experience across the landscape of offline-first protocols\n\ + - [cafca](https://github.com/cafca) is part of the [Decent Patterns](https://decentpatterns.com/)\ + \ library team, currently working on the JavaScript SDK of ditto\n\n## Conclusion\n\ + \nSecure encryption for large groups is a complex problem which gets even harder\ + \ in a decentralised setting. With the new [Messaging Layer Security Protocol](https://messaginglayersecurity.rocks)\ + \ (MLS) and [p2panda](https://p2panda.org) as the decentralisation layer we want\ + \ to introduce a solution that can account for a range of community-, threat- and\ + \ networking models. At the same time we want to provide accessible and well-documented\ + \ APIs for developers to easily build their solutions on top." +start: 1680256800 +end: 1680861600 +state: closed +author: '0xe661830067591344F10E165Fd75bCDa8D041bdD0' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 1192.985292607802 +scores: + - 200.25708236414337 + - 675.314024711218 + - 317.414185532441 +votes: 655 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-81.yml b/public/GIPs/GIP-81.yml new file mode 100644 index 00000000..40c9b3c1 --- /dev/null +++ b/public/GIPs/GIP-81.yml @@ -0,0 +1,62 @@ +id: '0x36072c476d6f213336b52fd267f2b229cfc4218316cd43a6146592d270c49170' +gip_number: '81' +url: https://snapshot.org/#/gnosis.eth/proposal/0x36072c476d6f213336b52fd267f2b229cfc4218316cd43a6146592d270c49170 +title: Should GnosisDAO fund CirclesUBI Indonesia’s product testing launch? +body: 'After discussion with GnosisDAO, CirclesUBI.id is submitting a revised proposal + to fund Milestone 1 associated with the product testing and participant onboarding + in Bali, Indonesia. + + + CirclesUBU.id will receive €500,000 once the GIP passes in order to hit Milestone + 1 of 1500 participants in product testing across 17 villages. + + + Here’s the definition of onboarded participants: + + + 1. Onboarding of Field Officers/Local Champions. + + a) +20 people successfully follow a training program, and pass screening to ensure + they can support their communities + conduct effective troubleshooting & survey + interviews during 3 months of the roll out period. + + b) These 20 people ensure 1500 participants are successfully onboarded. + + + 2. Onboarding of Testing Participants (users). + + a) 1500 participants have successfully attended the user onboarding workshop and + understand how to use their Circles account, have created their circles user account + + a shop account that is visible on the circles marketplace. + + + 3. Active participants (retention rate). + + a) # of users that conduct at least 1 translation per week and participate in feedback + interviews about the product performance and benefits. + + 4. Inactive participants. + + a) Are not actively using the app at least 1 x per week, and participate in feedback + interviews aimed to determine what the reasons are that they are not using the app.' +start: 1682451673 +end: 1683056473 +state: closed +author: '0xB922a0a797026D5C45145503E1976989B05Cf307' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 89771.96730297993 +scores: + - 89710.90429065353 + - 22.846480184020127 + - 38.21653214236081 +votes: 309 +quorum: 0 +funding: + amount: 500,000 + currency: € + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-82.yml b/public/GIPs/GIP-82.yml new file mode 100644 index 00000000..35110896 --- /dev/null +++ b/public/GIPs/GIP-82.yml @@ -0,0 +1,173 @@ +id: '0x753224fa15a96ccd14044906e67270e49076e7b2282eb57fe816648426f26e93' +gip_number: '82' +url: https://snapshot.org/#/gnosis.eth/proposal/0x753224fa15a96ccd14044906e67270e49076e7b2282eb57fe816648426f26e93 +title: Should GnosisDAO co-fund a community owned forest / land art project (terra0)? +body: "## Summary\nThis proposal seeks Gnosis DAO to become a sponsor and partner\ + \ that would partially fund terra0 to support the development of a novel large-scale\ + \ art project in Germany that focuses on community-land stewardship managed by a\ + \ DAO. The project will expand the use cases of the Gnosis ecosystem by using Gnosis\ + \ infrastructure (Safe, Gnosis Chain, Zodiac) to manage and restore a forest over\ + \ an indefinite time period. The artistic development is being supported by Light\ + \ Art Space (LAS), a German art foundation focused on art, science, and technology\ + \ and will culminate in a large-scale exhibition in Berlin (3-6 months), allowing\ + \ for a broad, diverse, and non-native audience to be exposed to Gnosis and Web3.\n\ + \nIn parallel, terra0 will produce a legal framework allowing for the integration\ + \ of a Gnosis Safe with the formation of a German Verein. As part of this proposal,\ + \ terra0 will develop and provide tools to integrate Gnosis Safes with this framework\ + \ and use the project to establish an inaugural precedent.\n\nterra0 seeks 195,000\ + \ € from Gnosis DAO to help realize this ambitious project (~ 18.2% of 1,071,000\ + \ € total project budget). The grant from Gnosis would help fund the purchase of\ + \ a plot of land containing a forest in Germany and lay the groundwork for the legal\ + \ framework and application of a DAO as a Verein for a Gnosis Safe. With this funding\ + \ Gnosis DAO will:\n\nSponsor the terra0 land art project and be featured on exhibition\ + \ material, resulting in increased publicity, visibility, and user base for Gnosis,\ + \ Gnosis Chain, and Gnosis Safe within a new cultural sphere.\n\nSupport the development\ + \ of a new legal framework for DAOs resulting in a composable template engine for\ + \ Gnosis Safes which allows DAOs to be registered as a Verein in Germany, thereby\ + \ creating new real-life applications for DAOs built on Gnosis tools.\n\nReceive\ + \ an allocation of the tokens associated with the upcoming terra0 land art project\ + \ and DAO. We also see Gnosis DAO as a key community member and participant in the\ + \ project.\n\n## Background\nterra0 is a group of developers, artists, and researchers\ + \ who have been creating artworks and prototyping decentralized applications since\ + \ 2016. Through technical experimentation, artistic exploration, and stress-testing\ + \ legal frameworks related to natural resources, terra0 creates technological-augmented\ + \ ecosystems and questions the contemporary representation of the living environment.\ + \ In this final version of the project, realized for the first time on the scale\ + \ of an entire forest in Germany, terra0 will develop a framework for the collaborative\ + \ management of shared resources and explore alternative, non-exploitative valuations\ + \ of nature. terra0 plans to instantiate a DAO to cooperatively organize the restoration\ + \ of the ecosystem using bio-markers oriented towards greater biodiversity and resistance\ + \ to environmental pressures.\n\nPrevious terra0 works and prototypes can be seen\ + \ on our website. They have been exhibited and discussed at the 58th Carnegie International,\ + \ the 17th Architecture Biennial Venice, Canadian Centre for Architecture Montreal,\ + \ The Shed New York City, Kunsthalle Zürich, Francisco Carolinum Linz, Chronus Art\ + \ Center Shanghai, Furtherfield Gallery London, Schinkel Pavillon Berlin, and Vienna\ + \ Biennale, among others.\n\n## Motivation\nIt’s no secret that we are in the midst\ + \ of an ecological crisis spurred on, in large part, by excessive resource use and\ + \ extraction. In the West, our relationship with the environment has been defined\ + \ for centuries by land’s productive value, which has led to gross ecological mismanagement\ + \ and destabilization. terra0 seeks to re-orient this relationship towards intrinsic\ + \ ecological value by applying Web3 principles of decentralized collective governance,\ + \ communal ownership of public goods, and automated digital mediation in service\ + \ of environmental resilience and autonomy. The development of decentralized programmable\ + \ systems for exchanging value is giving rise to code and community-based digital\ + \ organizational structures that enable democratic control of property. Novel ecological\ + \ collectives such as those proposed by terra0 could distribute decision rights\ + \ based on immanent bio-regional agency, relationships, and proximal metrics.\n\n\ + ## Rationale\nAs a collective, terra0 has been experimenting for years with Gnosis\ + \ Safe as infrastructure for treasury management and as a trust anchor. Historically,\ + \ we see Gnosis Chain and community as a place where DAO experiments happen; one\ + \ we believe provides essential DAO infrastructure for the projects, affordable\ + \ txs, and a community that cares deeply about its development. Gnosis’ commitment\ + \ to open standards whose design philosophy is one of expandability, inclusivity,\ + \ and composability aligns with the terra0 ethos of experimenting with novel forms\ + \ of governance and communities centered around ecological commons.\n\nThe proposed\ + \ art project is of value to the Gnosis community as it engages a diverse audience\ + \ and is participatory in nature — pairing ecological narratives with a concrete\ + \ implementation of DAO governance. This includes visitors of the exhibition, online\ + \ DAO members, local stakeholders, an international art audience, and experts from\ + \ various fields. When combined with the timescale, exhibition, and participatory\ + \ nature of the terra0 land art project, presents a unique opportunity to engage\ + \ an audience that would not normally be accessible while increasing the capability\ + \ and usage of the Gnosis ecosystem and Gnosis Chain. The land and forest will function\ + \ as a permanent land art installation and be accompanied by an internationally\ + \ recognized and large-scale public exhibition organized by LAS in Berlin over the\ + \ period of 3-6 months — which may travel to other locations in the future. This\ + \ connection has the potential to enhance the public perception of Gnosis: applied\ + \ ecology and community governance have rarely been publicly discussed and tested\ + \ on such a scale.\n\nAdditionally, the application and implementation of mapping\ + \ a Verein onto a DAO will enhance how it can be perceived in a legal context —\ + \ one we hope will set a precedent that will allow for its legality to be recognized\ + \ in other locals, contexts, and jurisdictions while featuring Gnosis Chain and\ + \ tools as key components. Although the legal definition and context of a Verein\ + \ is unique to Germany, once incorporated, it allows for international members to\ + \ join the organization — therefore not only being bound to the members residing\ + \ in Germany (except seven core members). The possibility to integrate DAOs into\ + \ a concrete legal structure using the Verein is an important building block for\ + \ our project and enables real-world use cases in areas such as environmental protection\ + \ and restoration.\n\n## Implementation\nThe land art project will be developed\ + \ over the next year, in this process terra0 will purchase a plot of land containing\ + \ a forest (10-20 hectares) in nearby proximity to Berlin, instantiate a DAO to\ + \ augment the ecological agency of the ecosystem, and transfer the ownership of\ + \ the land to it. The DAO governs the token systems, enforces the sovereignty of\ + \ the underlying ecosystem, and mediates human oriented relations. The secondary\ + \ function of the DAO is that of providing a social space, thus contributing to\ + \ the stimulation of work groups and educational initiatives relating to ecology\ + \ and technology. Many visitors and potential DAO participants will have little\ + \ experience with blockchain and Web3 — and will interact and be exposed to Gnosis\ + \ Chain and ecosystem for the first time. Through a special statute and voting mechanism\ + \ of the association which locks the ownership in the DAO, it also serves as a permanent\ + \ protector of the piece of land against disposal and reintegration into economic\ + \ dependence and exploitation.\n\nDuring the production period and exhibition terra0\ + \ and LAS will host a series of workshops and events to on-board and orient the\ + \ community into the DAO. Gnosis DAO will receive a proportional amount of tokens\ + \ relative to the proposed funding to participate in the terra0 land art project\ + \ — one that we see as a key member when engaging in a long-term project about the\ + \ evolution of legal structures pertaining to DAOs and ecological management.\n\n\ + The exhibition component of the terra0 land art project will be exhibited with LAS.\ + \ Previous exhibitions produced by LAS can be viewed here 1. In recent exhibitions,\ + \ LAS received approximately 25 000 – 30 000 visitors for the duration, an average\ + \ of 600-800 visitors a day. Additional coverage of 60 – 100 media outlets enabled\ + \ the exhibition’s themes to be brought to the forefront of international discourse.\n\ + \nFor the land art project to be successful, the DAO requires a legal structure\ + \ to hold and administer property (land) according to German law. We are currently\ + \ working with legal teams to define a Gnosis Safe as the managing tool for a Verein\ + \ under German jurisdiction. This framework will allow for the fluid recognition\ + \ of token holders (as addresses) to be viewed as legal members of an organization\ + \ at the time of voting without any additional registration.\n\n#### Two aspects\ + \ are to be particularly emphasized:\n1. The legal membership in the Verein will\ + \ be defined only by a membership token, the associated address, and will not require\ + \ the registration of identity through KYC (with the exception of seven registered\ + \ members, which is a condition for each Verein in Germany).\n\n2. Votes which take\ + \ place with the help of the associated voting methods (such as Governor mod) to\ + \ be legally defined by the association rules as “continuous association meetings.”\n\ + \nIf these two aspects are laid out in an association regulation, the Gnosis Safe\ + \ can be legally integrated into a Verein without any additional infrastructure.\ + \ The development period will be followed by an initial implementation and prototype\ + \ of this legal structure that will be deployed as the framework for the DAO in\ + \ conjunction with the land art project and exhibition.\n\nFollowing this, terra0\ + \ will create a web and Gnosis Safe app (this could take the form as something similar\ + \ to KALI with increased functionality) with a DAO template engine that will allow\ + \ and enable a DAO to be incorporated under German law as a Verein. The app will\ + \ facilitate the deployment of a Gnosis Safe, create the legal documents required\ + \ for the registration of the Verein under German law, and will use the Gnosis Safe\ + \ and associated voting method.\n\n## Milestones & timeline\n### 2023\n- May–June:\ + \ Completion of the legal framework and formation of the legal entity (= proof of\ + \ concept [Payment #1 for the acquisition of the forest (175,000€) to the Verein]\n\ + - June–July: Acquisition of the forest\n- June–March 2024: Technical development\ + \ of the DAO structure, ecological survey, assemble advisory board, …\n- July–August:\ + \ Development of the template engine for Gnosis safe [Payment #2 (20,000€) for the\ + \ legal research and implementation of the template engine]\n\n### 2024\n- January–May:\ + \ Community building\n- February–April: Exhibition building\n- April: Allocation\ + \ of tokens to funding partners\n- May: Exhibition/DAO opening + NFT sale\n- May–June:\ + \ Public program\n\n## Relevant links:\n\n#### Link to Gnosis Forum thread:\n- https://forum.gnosis.io/t/gip-82-should-gnosisdao-co-fund-a-community-owned-forest-land-art-project-terra0/6570\n\ + \n#### Background information / press:\n- Website: [terra0.org](https://terra0.org/)\n\ + - Light Art Space: [lightartspace.org](https://lightartspace.org/)\n- Budget: \ + \ [Gnosis Proposal Budget .xlsx](https://docs.google.com/spreadsheets/d/1McYyWCZlCsCNXzaqsLBjVErt9gOdtGnv/edit?usp=sharing&ouid=101530439550121892891&rtpof=true&sd=true)\n\ + - [Simon Denny & terra0 / outland.art](https://outland.art/simon-denny-terra0/)\n\ + - [terra0’s Self-Governing Forests / frieze.com](https://www.frieze.com/article/terra0-profile-2023)\n\ + - [This tree owns itself—and is fighting for its own survival / fastcompany.com\ + \ ](https://www.fastcompany.com/90738287/this-tree-owns-itself-and-is-fighting-for-its-own-survival)\n\ + \ \n![TERRAO-PIC-1024x683.jpg](ipfs://bafybeifplcv6x3dvrp3xlbbubao7qfuo5wgcga5kklfowtqdjovp72z5ue)\n\ + \ " +start: 1681464600 +end: 1682069400 +state: closed +author: '0x70e095FB47e10e696bf40d759B3656d273C76DDC' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 518.8016342385218 +scores: + - 390.0262793816968 + - 122.37719500329231 + - 6.3981598535326984 +votes: 329 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-83.yml b/public/GIPs/GIP-83.yml new file mode 100644 index 00000000..557d9384 --- /dev/null +++ b/public/GIPs/GIP-83.yml @@ -0,0 +1,109 @@ +id: '0x9ddbd422d2bf3aee2ff225a62e7576843b26118ffa9de2f1cf08dc7da0ee0203' +gip_number: '83' +url: https://snapshot.org/#/gnosis.eth/proposal/0x9ddbd422d2bf3aee2ff225a62e7576843b26118ffa9de2f1cf08dc7da0ee0203 +title: Should GnosisDAO fund decentralized alternatives of Gnosis Chain pruned and + archival RPC endpoints from Pocket Network f +body: "https://forum.gnosis.io/t/gip-83-should-gnosisdao-fund-decentralized-alternatives-of-gnosis-chain-pruned-and-archival-rpc-endpoints-from-pocket-network-for-18-months\ + \ \n\nService Agreement for Decentralized RPC Access of Gnosis Chain through the\ + \ Pocket Network protocol\n\nCategory\n\nService Agreements - Decentralized Gnosis\ + \ Chain Public RPCs powered by Pocket Network\n\nExecutive Summary\n\nPocket Network\ + \ is a decentralized, middleware protocol focused on the RPC layer. Its goal is\ + \ to provide blockchain application developers with a privacy-preserving, multi-chain\ + \ gateway on top of the Pocket Network protocol that allows dapp developers to mint\ + \ reliable, fast RPC endpoints for the 40+ blockchain networks supported, including\ + \ both Gnosis Chain pruned and Gnosis Chain archival.\n\nFor example, over the last\ + \ month, Gnosis Chain has carved the number 3 spot in terms of requests per day\ + \ at ~130.6M daily average requests through Pocket Network according to POKTscan!\n\ + \nAfter speaking with stakeholders on both sides of the aisle, Pocket Network Inc\ + \ has been encouraged to publish this new Gnosis Improvement Proposal without the\ + \ retroactive funding aspect. The previous years of service are a gift to the Gnosis\ + \ community of users, developers, applications, and protocols. Thank you for the\ + \ opportunity to demonstrate Pocket Network’s value proposition as the most redundant,\ + \ reliable, multi-chain RPC layer by taking on additional traffic during Dark Forest\ + \ rounds and the xDAI to Gnosis Chain transition (to name a few past examples).\n\ + \nGnosis and Pocket stakeholders favor an 18-month service contract to fund continued\ + \ access to decentralized RPC alternatives for both Gnosis Chain pruned and Gnosis\ + \ Chain archival. It will allow GnosisDAO to steward this public good together with\ + \ Pocket Network!\n\nBy funding a pokt-powered Public Gnosis Chain RPC endpoint,\ + \ GnosisDAO and Pocket Network would continue to contribute to the decentralization,\ + \ increased resiliency, and censorship-resistance of the Gnosis Chain network. All\ + \ the while, continuing to incentivize Gnosis Chain node runners with $POKT tokens\ + \ for serving Gnosis dapps.\n\nService Description\n\nPocket Network Inc. staked\ + \ POKT on behalf of the GnosisDAO to subsidize a public good in the form of public\ + \ RPC endpoints (available in the Gnosis Chain docs) without rate limits:\n\n1.\ + \ https://gnosischain-rpc.gateway.pokt.network/\n2. https://gnosischain-archival-rpc.gateway.pokt.network/\n\ + \nThe current set of Gnosis Relay Chain IDs (RCIs) Pocket Network supports are:\n\ + \n1. Gnosis Chain pruned = 0027 (mainnet)\n2. Gnosis Chain archival = 000C (mainnet)\n\ + \nThe POKTdao allowlisted Gnosis Chain (0027) on 07/06/21, with Gnosis Chain Archival\ + \ (000C) shortly after on 08/26/21).\n\nSince the allowlist date, Pocket node operators\ + \ earned 55.6M POKT from servicing over 38.9B Gnosis Chain mainnet read/write requests.\ + \ See this spreadsheet for a breakdown of relays drive and POKT earned.\n\nOver\ + \ that time, these Gnosis RCIs developed to become one of the more populated, stable,\ + \ and higher-performant pools of nodes. Pocket’s network of node runners easily\ + \ handled several spikes, including a big spike to 243.6M requests on a single day\ + \ recently in JAN 2023.\n\nOver the last year or so, Pocket Network has been serving\ + \ 100M+ requests per day with an excellent average response time of ~150ms with\ + \ success rates above 99% across all Pocket Portal regions. Moreso, in the Asia-Pacific\ + \ region (most used region by Gnosis) the response times are as low as 40ms (lower\ + \ = better & faster).\n \n![gip83 regions.png](ipfs://bafkreiff3yj5qgk2fk36gikhd33ep5rwmix2e2qipdw7eugx57wdnv3nm4)\n\ + \ \nAccording to POKTscan, there are currently 20,596 Pocket Service Nodes pointing\ + \ to Gnosis Full Nodes for the 0027 Relay Chain ID and 2,695 Pocket Service Nodes\ + \ pointing to Gnosis Archive Nodes for the 000C Relay Chain ID.\n\nThis demonstrates\ + \ the POKT node incentives at work!\n\nThe POKTdao has also supported node deployment\ + \ solutions through funding grants such as Node Pilot and DappNode to make it super\ + \ easy to spin up and monetize Gnosis full/archival nodes within the Pocket Network\ + \ protocol.\n\nService Scope and Service Delivery\n\nPocket Network agrees to these\ + \ milestones and deliverables:\n \n![gip83 milestones and deliverables.PNG](ipfs://bafkreiepfbfuhoyabcev64xp65pgiwo6v5th5f5hsctijf276xwl53mlbq)\n\ + \ \nSupport\n\nThe GnosisDAO will be able to monitor and manage the public RPCs\ + \ through our Pocket Portal as they see fit, including the ability to enable additional\ + \ security features such as allowlisting user-agents, origins, smart contracts,\ + \ and methods.\n \n![gip83 portal security settings.png](ipfs://bafkreie2bbe6fiz6ykrjppbgac2sfwyznna53svdjf2rrmg764cn5n54km)\n\ + \ \nThe GnosisDAO and Gnosis Chain users are able to submit support tickets through\ + \ this link.\n\nPricing and Payment\n\nPocket Network has simplified their model\ + \ this year to mirror a traditional SaaS-like tiered structure, which is much more\ + \ affordable. To sweeten the deal, Pocket is offering the Gnosis DAO team and community\ + \ a massive discount on a 150M requests per day at $0.0000020 throughput an 18-month\ + \ commitment with the option to renew:\n\n$164,250 USD for 150M Requests Per Day\ + \ on a 18-month contract\n\nThat represents 3.65x in yearly savings (a 365% discount)\ + \ compared to the original offer!\n\nPayment Schedule\t\nPayment Dates\tAmount Due\n\ + Upon Proposal Passing (50%) = $82,125 USD\nUpon Milestone Completion (50%) = $82,125\ + \ USD\nTotal (100%) = $164,250 USD\n\nPNI prefers payment in stablecoins, such as\ + \ USDC or DAI, at this provided address from Pocket Network, Inc. → 0x5F1Feefc4BB7a414096cCF070BeEF94da8Ff88A6\n\ + \nIn case a buffer is wanted/needed, as traffic continues to grow, PNI would like\ + \ to extend another option to purchase additional bandwidth at the discounted price\ + \ of $0.0000018640 per request throughout the contract period.\n\nIf Pocket Network\ + \ Inc is unsuccessful in their proposal to secure funding, PNI will continue to\ + \ support the Gnosis Chain network; however, in an effort to do so sustainably,\ + \ PNI would introduce per-second rate limits on the Public RPC that would channel\ + \ users and developers to a paid tier in the Pocket Portal where costs would be\ + \ passed on directly to Gnosis builders/users outside the free tier of 250k requests\ + \ per day.\n\nService Terms and Exit Strategy\n\nContact the sales team at Pocket\ + \ Network, Inc.\n\nTeam/Organization\n\nPocket Network, Inc.\n\nhttps://www.linkedin.com/company/pocket-network/\n\ + https://twitter.com/POKTnetwork\n\nConclusion\n\nA decentralized RPC protocol is\ + \ crucial for a blockchain that values decentralization such as Gnosis Chain.\n\n\ + Public RPCs are a public good, Pocket Network hopes to share in the responsibility\ + \ together with the GnosisDAO of maintaining these high-quality public goods on\ + \ behalf of Gnosis Chain users. The Pocket Network team and community have been\ + \ a long-time supporters of the Gnosis Chain.\n\nWe’re proud to continue supporting\ + \ Gnosis!" +start: 1679946726 +end: 1680551526 +state: closed +author: '0xa48168C3D73De7B4Fed96383E2BeF8e53443A263' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 16076.036619040271 +scores: + - 15867.747897788451 + - 66.16909919735816 + - 142.1196220544605 +votes: 585 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-84.yml b/public/GIPs/GIP-84.yml new file mode 100644 index 00000000..940d65fc --- /dev/null +++ b/public/GIPs/GIP-84.yml @@ -0,0 +1,104 @@ +id: gip-84-introducing-gip-guards-on-chain-financial-controllers-for-gips +gip_number: 84 +url: https://forum.gnosis.io/t/gip-84-introducing-gip-guards-on-chain-financial-controllers-for-gips +title: On-chain financial controllers for GIPs +body: "#### [lukasschor.eth | Safe](https://twitter.com/SchorLukas/status/1599373578469666816)\n\ + \n[@SchorLukas](https://twitter.com/SchorLukas/status/1599373578469666816)\n\nCongrats\ + \ to SafeGuard winning the main prize at [@ETHIndiaco](https://twitter.com/ETHIndiaco)\ + \ building a range of [@Safe](https://twitter.com/Safe) extensions such as deny\ + \ and allow list guards. \U0001F44F \n\n![](//forum.gnosis.io/uploads/default/optimized/2X/c/cbd8c7dbaeac897ec0444633d791c77790a133e0_2_690x393.jpeg)\n\ + \n[12:02 PM - 4 Dec 2022](https://twitter.com/SchorLukas/status/1599373578469666816)\ + \ 94 19 \n\n#### Category\n\nAdministrative\n\n#### Executive Summary\n\nSwitch\ + \ to Recovery-enabled GuardedSafes for all GIPs funded by the DAO to increase project\ + \ accountability and continued communication with the community.\n\n#### Terminology\ + \ used\n\n 1. **GIP-Guard** : A Transaction Guard designed for specific GIPs.\n\ + \n 2. **Milestone Payout Guard** : A GIP-Guard that only lets transactions be processed\ + \ from a Safe if the defined milestones have been met.\n\n 3. **GuardedSafe** :\ + \ A Safe with GIP-Guard added to it.\n\n 4. **Recovery-enabled GuardedSafe** :\ + \ A GuardedSafe with a recovery module added to it allowing GnosisDAO to recover\ + \ funds if they feel the team is underperforming.\n\n\n\n\n#### Introduction\n\n\ + GIPs have been instrumental in Gnosis ecosystem growth. Most GIPs are funded upfront\ + \ however, there is limited information available after funding. Milestones are\ + \ untracked, project updates are sparse and their status is unknown. There is no\ + \ easy way to analyse the impact of the project, learn from them, or know if the\ + \ project is still active. Moreover, if the team becomes unresponsive, the funded\ + \ amount sits idle in their wallet with no way to recover for the DAO.\n\nSome examples\ + \ of this we have seen are:\n\n 1. GIP-61: Bootnode received $580k to contribute\ + \ to the development and maintenance of bridges in the Gnosis ecosystem, Circles\ + \ Infrastructure, Running Gnosis beacon chain validators, and long-term DAO growth.\ + \ They promised bi-weekly status updates and reports on project progress. However,\ + \ over the last 8 months, only 1 update has been provided.\n 2. GIP-18: Tick-DAO\ + \ received $750k from Gnosis DAO. There have been no updates to the community after\ + \ the proposal has passed. The project even changed its name to Quiver Alpha, with\ + \ no updates to the Gnosis community.\n\n\n\nBeing a GIP with multiple scopes of\ + \ work there needs to be more transparency in how the funds are being used, milestone\ + \ progress and how far the roadmap has been executed.\n\n#### Proposed Changes\n\ + \nWe propose transitioning to **Recovery-enabled GuardedSafes** for all GIPs funded\ + \ by the DAO. These on-chain financial controllers have a **Milestone Payout Guard**\ + \ that only lets transactions be processed from the Safe if the defined milestones\ + \ have been met.\n\nFor each GIP, the community along with the builder team decides\ + \ on certain milestones that need to be met by a particular point in time. For each\ + \ of these milestones, the community appoints some milestone reviewers. These reviewers\ + \ will be responsible for verifying the status of the pre-defined milestones. If\ + \ the milestones are met, the reviewers mark the milestone as completed. Now, only\ + \ when all reviewers mark a milestone as completed can transactions from the Safe\ + \ be processed. In all others cases, it will revert.\n\n#### Impact and Benefits\n\ + \nSince the GIP has milestones already defined in the proposal, this **Milestone\ + \ Payout Guard** would ensure that the community is informed and the project is\ + \ motivated to stay on track. These milestones can be as subjective and tailored\ + \ to each project. It could include community calls, writing blogs or conducting\ + \ workshops could be set.\n\nWith **Recovery-enabled GuardedSafes** , the GnosisDAO\ + \ could recover funds upwards of $500k after seeing that the project was dormant\ + \ and lacked progress.\n\nThese **GuardedSafes** nudge projects with funds to keep\ + \ moving in the right direction while ensuring the community has some control if\ + \ things don’t go according to plan.\n\n#### Implementation Plan\n\nDuring the\ + \ proposal discussion (Phase 2), the exact milestones and rubrics need to be ratified,\ + \ following which, a **Recovery-enabled GuardedSafe** will be created.\n\nThis includes\ + \ two aspects:\n\n * **Milestone Payout Guard** : This is the **GIP-Guard** that\ + \ will be added to the Safe that the builder receives money in and lets the builder\ + \ withdraw funds from the Safe only if they meet the milestones set earlier. The\ + \ milestones completion will be checked by a set of reviewers as explained above.\n\ + \ * **Recovery Module** : This module will also be added to the same Safe and will\ + \ grant GnosisDAO some admin privileges. It will let the DAO recover funds without\ + \ needing the signatures from the Safe owners in case the team goes dormant or abandons\ + \ the project and stops building.\n\n\n\nWe propose all GIPs going forward receive\ + \ funds through **Recovery-enabled GuardedSafes**.\n\nSafeGuard will provide technical\ + \ support or assistance when needed. We will also work with the community on fine-tuning\ + \ the Guard to each proposal.\n\n#### Risks and Challenges\n\nThe main challenge\ + \ with GIP-Guards is to ensure that the guards work properly under all circumstances.\ + \ Transaction guards are smart contracts too and when dealing with financial matters,\ + \ it is of utmost importance that the contracts are secure. Hence, all of the GIP-Guards\ + \ will be throughly audited and only used after multiple rounds of testing.\n\n\ + #### Team/ Organization/References\n\nSafeGuard was one of the winners at ETH India\ + \ and is incubated and developed by [Questbook](https://questbook.app/).\n\nQuestbook\ + \ is a grant orchestration tool being used by Compound, Polygon, Optimism and Aave\ + \ to disburse more than $3mn in grants. The team has also built Open Quest and Zero\ + \ Wallet.\n\n2 Likes\n" +start: 1680093601 +end: null +state: + - phase-1 +author: 'Dayitva Goel (@Dayitva) + + status: Draft + + type: Funding + + cre…' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-85.yml b/public/GIPs/GIP-85.yml new file mode 100644 index 00000000..b3ea4743 --- /dev/null +++ b/public/GIPs/GIP-85.yml @@ -0,0 +1,85 @@ +id: gip-85-gnosisdao-to-support-covalent-as-initially-mentioned-in-gip-16 +gip_number: 85 +url: https://forum.gnosis.io/t/gip-85-gnosisdao-to-support-covalent-as-initially-mentioned-in-gip-16 +title: GnosisDAO to support Covalent as initially mentioned in GIP 16 +body: "# GnosisDAO to support Covalent as initially mentioned in GIP-16\n\n * In\ + \ Favour\n * Against\n\n\n\n0 voters\n \n \n GIP: 85\n title: GnosisDAO\ + \ to support Covalent as initially mentioned in GIP 16\n author: Ryan Coree @coreeryan\ + \ & David Tso @davidtsocy \n status: Draft\n type: Funding\n created: 2023-04-19\n\ + \ funding: 50,000 USD\n \n\nDear GnosisDAO,\n\n[Covalent](https://www.covalenthq.com/docs/)\ + \ is a hosted blockchain data solution providing access to full historical and current\ + \ onchain data for 100+ supported chains, including Ethereum, Polygon, Arbitrum,\ + \ Optimism, Base, Linea, Scroll, Avalanche, Fantom, and more.\n\nCovalent Offers\ + \ 2 Products\n\n 1. Unified API: Covalent’s industry-leading Unified API is the\ + \ most robust set of API services available on the market today. Our Unified API\ + \ returns enriched blockchain data applicable to all blockchain networks, e.g. token\ + \ balances, transactions, log events, etc., enabling developers to build wallet\ + \ applications like Rainbow Wallet, NFT galleries like NFTX, investor dashboards\ + \ like CoinGecko, and taxation tools like Rotki. Over 3,000 applications and 35,000\ + \ active developers today rely on our Unified API, powering half a billion monthly\ + \ API calls.\n 2. Increment: Increment is a Business Intelligence (BI) platform\ + \ that empowers blockchain-based projects to understand their business metrics.\ + \ Built on our Unified API, Increment has the full historical data set for over\ + \ 100 chains. Increment is imbued with a standardized analytics framework – Reach\ + \ (for growing a user base), Retention (for retaining a user base), and Revenue\ + \ (for monetizing a user base). Increment also contains many more label tables for\ + \ NFTs and DeFi.\n\n\n\nProposal\n\n * As previously proposed in [GIP 16 - Gnosis\ + \ Chain - xDAI/Gnosis merge](https://forum.gnosis.io/t/gip-16-gnosis-chain-xdai-gnosis-merge/1904)\ + \ by Martin Köppelmann, the Co-Founder of Gnosis: “Gnosis Chain will look to attract\ + \ core Ethereum infrastructure projects that are currently unavailable on the xDai\ + \ chain. Gnosis Chain will cover the costs associated with such deployments. Examples\ + \ include Etherscan, Beaconcha.in, Infura, Alchemy, Covalent…”\n * Covalent will\ + \ index Gnosis and integrate it with our Unified API and Increment for a compensation\ + \ of 50,000 USD, this will benefit developers and analysts who want to access Gnosis’\ + \ data.\n * Covalent will also create custom documentation for Gnosis and run a\ + \ technical webinar for the Gnosis community to onboard more developers and kickstart\ + \ novel use cases.\n\n\n\nCovalent Deliverables\n\n 1. Index Gnosis’ public blockchain\ + \ and support it through our Unified API and Increment\n 2. Dedicated documentation\ + \ page for developers\n 3. Prominent Gnosis logo on Covalent’s website\n 4. Emails\ + \ and relevant notifications to Covalent’s user base\n 5. Promotion of launch across\ + \ social media handles, Discord groups, Telegram, etc.\n\n\n\nGnosis Deliverables\n\ + \n 1. Vote for governance proposal\n 2. A joint social media announcement post-integration\n\ + \ 3. Inclusion of Covalent’s logo in Gnosis’ marketing materials, website, and\ + \ documentation\n\n\n\nThe end date will be one year from the agreement’s effective\ + \ date. The agreement may be extended based on mutual discussions between relevant\ + \ parties.\n\nGrant and Disbursement\n\n * The amount to be funded from the GnosisDAO\ + \ treasury to Covalent is 50,000 USD of Gnosis’ xDai native token. Once the governance\ + \ proposal is approved, the payment will be processed as one single transfer.\n\ + \ * The xDai/USD exchange rate for the disbursements is to be determined at the\ + \ time of the transfer.\n\n\n\nTestimonials\n\n“So far, Covalent has significantly\ + \ enhanced the developer experience on Fantom via their Unified API. It will no\ + \ doubt be a staple in how users access blockchain data.”\n\n– Michael Kong, CEO\ + \ at Fantom\n\n“Decentralized applications and services need fast and reliable access\ + \ to backend data to deliver seamless experiences competitive with Web 2.0. With\ + \ its Unified API for data across multiple chains, Covalent is well-positioned to\ + \ support the march toward mass adoption of Web3.”\n\n– John Nahas, SVP of Business\ + \ Development at Avalanche\n\n“Broader Web3 adoption requires great application\ + \ UX and performant access to backend data, but these have historically been constrained\ + \ by what the direct node RPCs are able to offer. Covalent’s unique approach not\ + \ only delivers performance but also access to an enriched multi-chain data set\ + \ via their Unified API. It’s a great fit for Moonbeam developers looking to create\ + \ next-generation multi-chain applications.”\n\n– Derek Yoo, CEO at Moonbeam\n\n\ + Conclusion\n\nThe Covalent team hopes that the GnosisDAO can see the value of this\ + \ partnership and pledge their support. Thank you!\n" +start: 1681929393 +end: null +state: + - phase-1 +author: "Ryan Coree @coreeryan & David Tso @davidtsocy \nstatus: Draft\ntype…" +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 50,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-86.yml b/public/GIPs/GIP-86.yml new file mode 100644 index 00000000..bb3a8929 --- /dev/null +++ b/public/GIPs/GIP-86.yml @@ -0,0 +1,57 @@ +id: '0x0bed9b763f14d5374817c31a696cc8b4e03e1d157744c1ae3ed3ea81a1ec28a9' +gip_number: '86' +url: https://snapshot.org/#/gnosis.eth/proposal/0x0bed9b763f14d5374817c31a696cc8b4e03e1d157744c1ae3ed3ea81a1ec28a9 +title: Should the GnosisDAO commit to additional rETH usage in treasury operations? +body: 'Executive Summary + + + Gnosis DAO / Chain has decentralization as its core ethos, focusing on a distributed + validator set for the chain and an open DAO structure run by GNO holders. Despite + this, our Treasury has nearly all of its staked ETH assets sitting with LIDO as + stETH. Given the success of RocketPool Protocol in creating a massively decentralized + validator set through rETH and RPL, this proposal recommends that Gnosis DAO commit + to moving at least 50% of their stETH holdings to rETH holdings over time in order + to support Ethereum decentralization and reduce single protocol and “bad actor” + risk that comes from Lido’s limited node set (29 nodes vs Rocket Pool’s 2550 and + growing nodes). + + Introduction + + + As of last notice, the Gnosis Treasury (managed by Karpatkey) holds 64,124 wstETH + (~$130mm) and 5,725 stETH (~$10mm), 712 rETH (~$1.4mm), and 18,622 ETH. Full report + here: 20230424 - karpatkey’s Weekly Report on GnosisDAO Farms.pdf - Google Drive + 1 This concentrated holding of a centralized staking provider token is a risk to + Gnosis DAO and against the DAO’s core ethos of decentralization. This GIP is intended + to direct Karpatkey to move to reduce stETH dependency and introduce additional + rETH into their DeFi strategies in order to reduce risk to the DAO and provide support + to decentralized ethereum staking. + + Proposed Changes + + + The Gnosis DAO will instruct Karpatkey to reduce stETH dependency and increase staked + ETH diversity, but WILL NOT dictate how this is best accomplished. Karpatkey, once + instructed, will move forward with whatever strategies are in the best interest + of the DAO to reduce stETH exposure and provide additional usage of rETH / RocketPool' +start: 1684777713 +end: 1685382513 +state: closed +author: '0x756e9a772F87cC1B3c56E0b88f941BB3AeF0A81a' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 13654.690640959303 +scores: + - 13470.11920794947 + - 57.00257238971315 + - 127.5688606201184 +votes: 305 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-87-redo0.yml b/public/GIPs/GIP-87-redo0.yml new file mode 100644 index 00000000..6ea9d941 --- /dev/null +++ b/public/GIPs/GIP-87-redo0.yml @@ -0,0 +1,75 @@ +id: '0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f' +gip_number: '87' +url: https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f +title: Should GnosisDAO claim its vested GEL allocation and delegate it along with + COW to governance Safe managed by karpatkey? +body: "## Summary\nThis proposal triggers the Gnosis DAO Safe to claim the fully vested\ + \ GEL tokens from Gelato and then delegate the voting power of GEL and COW to the\ + \ governance Safe managed by karpatkey following GIP-58.\n\n## Motivation\n####\ + \ GEL\nFollowing Gelato’s community vote on accelerating the GEL vesting 1, GEL\ + \ tokens have been fully vested on the Gnosis DAO since the 27th of February, 2023.\n\ + \nHowever, these tokens are not being put to any use in the Gnosis ecosystem. By\ + \ enabling the Gnosis DAO to claim the vested GEL tokens and delegate their voting\ + \ power to the karpatkey’s governance Safe, we can ensure that these tokens are\ + \ contributing to shape the future of Gelato.\n\nkarpatkey has been managing the\ + \ Gnosis DAO treasury since GIP-20, having later extended the range of services\ + \ through GIP-58. Through our strong relationship with Gnosis DAO, we can actively\ + \ manage the voting power of GEL to benefit the Gnosis DAO. The complete amount\ + \ vested to Gnosis DAO is 5,258,625 GEL—and these are not intended to be sold.\n\ + \nThe claimable GEL amount would put Gnosis DAO in 9th place 3 of the current GEL\ + \ holders.\n\n#### COW\nFurthermore, the Gnosis DAO has access to 48.5MM COW voting\ + \ power on CoW DAO. This voting power consists of 47472327.585 vCOW and 1027672.415\ + \ COW.\n\nFor vCOW, Gnosis DAO currently has the second largest share of 14.35%,\ + \ and for COW, Gnosis DAO holds 0.1028% of the current circulating supply.\n\nkarpatkey\ + \ can also vote on the Gnosis DAO’s behalf and ensure the mutually beneficial growth\ + \ of both Gnosis DAO and CoW DAO as karpatkey has been working together with CoW\ + \ DAO since the creation of the Core Treasury Team (CIP-19 1).\n\n## Specification\n\ + The proposal includes the following steps:\n\nClaim first batch of vested GEL token:\ + \ 2,629,312 GEL\nClaim second batch of vested GEL token: 2,629,312 GEL\nDelegate\ + \ the voting power for GEL on Snapshot to karpatkey’s governance Safe eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\n\ + Delegate the voting power for COW on Snapshot to karpatkey’s governance Safe eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\n\ + \n## Implementation\nThe snapshot vote, if successful, will trigger two claims on\ + \ Gelato Governance Dashboard 4 and then delegate the voting power of GEL and COW\ + \ on snapshot to eth:0x8787FC2De4De95c53e5E3a4e5459247D9773ea52, karpatkey’s governance\ + \ Safe.\n\n- Proposed .json for Snapshot:\n\n```json\n[\n {\n \"to\": \"0x4A7c7652aBd5E5e3467C458E42493630AAA7DDD6\"\ + ,\n \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"withdraw(address\ + \ receiver_, uint256 vestingId_, address to_, uint256 value_)\",\n \"params\"\ + : [\n \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"0\",\n \ + \ \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"2629312500000000000000000\"\ + \n ]\n },\n {\n \"to\": \"0x4A7c7652aBd5E5e3467C458E42493630AAA7DDD6\",\n\ + \ \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"withdraw(address\ + \ receiver_, uint256 vestingId_, address to_, uint256 value_)\",\n \"params\"\ + : [\n \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"1\",\n \ + \ \"0x0da0c3e52c977ed3cbc641ff02dd271c3ed55afe\",\n \"2629312500000000000000000\"\ + \n ]\n },\n {\n \"to\": \"0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446\",\n\ + \ \"operation\": 0,\n \"value\": \"0\",\n \"method\": \"setDelegate(bytes32\ + \ id, address delegate)\",\n \"params\": [\n \"0x70697374616368696f64616f2e65746800000000000000000000000000000000\"\ + ,\n \"0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\"\n ]\n },\n {\n \"\ + to\": \"0x469788fE6E9E9681C6ebF3bF78e7Fd26Fc015446\",\n \"operation\": 0,\n \ + \ \"value\": \"0\",\n \"method\": \"setDelegate(bytes32 id, address delegate)\"\ + ,\n \"params\": [\n \"0x636f772e65746800000000000000000000000000000000000000000000000000\"\ + ,\n \"0x8787FC2De4De95c53e5E3a4e5459247D9773ea52\"\n ]\n }\n]\n```\n\n\ + ## References\n- [Transaction payload](https://gist.github.com/FreeHeadSpace/a945e9e4901f998ad8d2bf3140a634f1)\n\ + \n- [Tenderly Simulation](https://dashboard.tenderly.co/public/safe/safe-apps/simulator/30bd7a35-9c93-4d10-88f7-89dcb7ef6171)\n\ + \n- [Forum Discussion](https://forum.gnosis.io/t/gip-87-should-gnosisdao-claim-its-vested-gel-allocation-and-delegate-it-along-with-cow-to-governance-safe-managed-by-karpatkey/6961)" +start: 1686898740 +end: 1687503540 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 79179.90426951686 +scores: + - 79170.67397579648 + - 0.17851071599198093 + - 9.051783004376448 +votes: 363 +quorum: 0 +funding: + amount: 5,258,625 + currency: GEL + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-87.yml b/public/GIPs/GIP-87.yml new file mode 100644 index 00000000..92257ed2 --- /dev/null +++ b/public/GIPs/GIP-87.yml @@ -0,0 +1,32 @@ +id: '0xd15dc7f0fbc00d6c6c07e18f41c1a5dd54adad77b3dae6cb0d0111503f7fa0c7' +gip_number: '87' +url: https://snapshot.org/#/gnosis.eth/proposal/0xd15dc7f0fbc00d6c6c07e18f41c1a5dd54adad77b3dae6cb0d0111503f7fa0c7 +title: '[Redo]Should GnosisDAO claim its vested GEL allocation and delegate it along + with COW to governance Safe managed by...' +body: "# Summary\nThis is a redo of the proposal for [GIP-87](https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f)\ + \ as the attached transactions were not executed in time, and have subsequently\ + \ expired. \n\nThis procedural vote enables the payload from the successful proposal\ + \ to be executed. The original specifications remain unchanged and can be seen in\ + \ the approved [GIP-87](https://snapshot.org/#/gnosis.eth/proposal/0xff4bc12a163ba195f74708aa0fedab200ba8f4f4be64d1d7685b1796cd40785f\ + \ ) description." +start: 1699531200 +end: 1700136000 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 798720.7114761322 +scores: + - 55437.637047530334 + - 94.91241669654542 + - 743188.1620119056 +votes: 276 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-88.yml b/public/GIPs/GIP-88.yml new file mode 100644 index 00000000..b2c0f5f8 --- /dev/null +++ b/public/GIPs/GIP-88.yml @@ -0,0 +1,206 @@ +id: '0xe1cc4813e19f2f62ee80cf337642b40617ce68e27582ba8c00ee5c9f96025146' +gip_number: '88' +url: https://snapshot.org/#/gnosis.eth/proposal/0xe1cc4813e19f2f62ee80cf337642b40617ce68e27582ba8c00ee5c9f96025146 +title: Should Gnosis Chain provide liquidity for Circles Group Currencies in collaboration + w/Proof of Humanity? +body: "http://forum.gnosis.io/t/gip-88-should-gnosis-chain-provide-liquidity-for-circles-group-currencies-in-collaboration-w-proof-of-humanity/6983\n\ + \nauthor: Julio Linares, Clément Lesaege \n\n\nExecutive Summary:\n\nCirclesUBI\ + \ is a dapp running on Gnosis Chain which distributes a Universal Basic Income (UBI)\ + \ via a P2P mesh credit protocol. Recently, a secondary issuance mechanism has been\ + \ developed, called Group Currencies, as a way to bridge Circles to state money\ + \ systems and crypto-assets. We propose that Gnosis Chain provides liquidity to\ + \ two specific group currencies: the BER group currency administered by the Circles\ + \ Coop e.G. and the Proof of Humanity (POH) group currency administered by the POH\ + \ Origin team. By partnering with projects like Monerium, the goal is to pave the\ + \ way to position Circles as a leading real world payment application that provides\ + \ a UBI to people worldwide, strengthening the Gnosis ecosystem. The total costs\ + \ of the project are 1,700,000 EUR for a period of one year from the moment the\ + \ proposal gets accepted by the Gnosis DAO.\n\nSpecification\n\nCircles (CRC) are\ + \ minted as personal currencies at a rate of roughly 1 CRC per 1 hour or 24 CRC\ + \ per day, with a yearly 7% demurrage on the money supply to incentivise circulation.\ + \ The current socially agreed exchange rate of CRC to e.g. Euros is roughly 10:1.\ + \ Group currencies are minted on a 1:1 basis, so that for each group currency minted,\ + \ one personal currency gets deposited and locked into a specific treasury. Group\ + \ currencies have three modes of issuance or minting:\n\n1. Only the owner can mint.\n\ + 2. Only the group can mint.\n3. Everyone can mint.\n\nIn order to test group currencies\ + \ at a larger scale, the following proposal seeks to grant the ability to exchange\ + \ Circles group currencies for the following groups:\n\n1. Proof of Humanity (Origin):\ + \ in order to establish a clear collaboration and integration between POH-Origin\ + \ and CirclesUBI, we propose a group currency that is used by POH-Origin users who\ + \ join the Circles POH group currency as part of their basic income distribution\ + \ system. POH is a sybil resistance registry that wants to use Circles group currency\ + \ for UBI distribution. We propose that Gnosis Chain commits to fund a total of\ + \ 500.000 EUR to bring liquidity onto their group currency (the liquidity will stay\ + \ owned by the Gnosis DAO). More information about POH's recent fork can be found\ + \ [here](https://gov.proofofhumanity.id/t/phase-3-binding-hip-74-a-peaceful-fork/2487).\ + \ Technically, the PoH system would have a group currency manager for the creation\ + \ of its Circles group currency. More details of that can be found [here](https://gist.github.com/AndreiMVP/63fe2376400ebb89ece633646aa8c625).\ + \ For more technical information you can find a GitHub repository for the POH GC,\ + \ which includes a README, [here](https://github.com/Proof-Of-Humanity/group-currency)\ + \ Additionally, [here](https://hackmd.io/@andreimvp/pohgct-guide) you can read a\ + \ more in-depth presentation/ testing guide for the PoH Group Currency. We believe\ + \ strong synergies can come from this collaboration between Circles and Proof of\ + \ Humanity (Origin) in the space, both powered by Gnosis chain.\n\n2. [Circles Coop](http://circles.coop/)\ + \ eG: as part of the ongoing Berlin Open Pilot, the Circles Coop provides Euros\ + \ in exchange for CRC that businesses accept in return for goods and services as\ + \ a way of increasing fungibility of CRC and incentivising local trade, enabling\ + \ a people-powered, bottom-up basic income. You can see more about the work of the\ + \ Circles Coop [here](https://vimeo.com/769402776). An analysis of the Berlin network\ + \ (December 2022) by the NetFi team at [Freiburg Institute of Basic Income Studies](https://www.fribis.uni-freiburg.de/en/fribis/)\ + \ can be accessed [here](https://docs.google.com/document/d/1husreoJz3HQq9_C0LXRMiGRoC_hL5Uvxds9UwzTeeoI/edit?usp=sharing)\ + \ (using novel network science methods).\n\nBER Exchange\n\nNow that we have established\ + \ an active economic network in Berlin with over 2000 individual participants and\ + \ 20 merchant partners, the goal of the Circles Coop for the next year is to leverage\ + \ BER to create a sustainable community-driven investment environment for small\ + \ and medium businesses within the circles network in order to expand the basic\ + \ income economy. The group currency administered by the Circles Coop will be called\ + \ \"BER'', after Berlin. The BER will be backed by production of goods and services\ + \ coming from business sales in CRC. For the first years, we envision BER will be\ + \ issued as a service by the Circles Coop based on the CRC that businesses in the\ + \ network send to the Coop on a 1:1 basis. The Circles Coop will maintain a list\ + \ of trustees or people who commit to give labour, capital or land to the network\ + \ for the issuance of BER and other trade partners of the B2B network. After more\ + \ knowledge and experience is gathered from the workings of BER on the Circles'\ + \ web of trust, the Coop will begin to experiment with distributing group issuance\ + \ rules to the wider economic network.\n\n* BER will be sold for Euro-e to community\ + \ investors at a discount.\n* Euro-e will be given to the businesses in the Berlin\ + \ network either as direct zero/low interest loans or as part of the ongoing pilot\ + \ program.\n* Community investors can use BER to buy goods and services or sell\ + \ BER back for Euro-e at a fixed rate. This means that for the first year businesses\ + \ can only access BER through their own sales or by buying/selling BER with Euro-e\ + \ from other businesses or community investors.\n\nCo-payment API & Multi-Token\ + \ Display:\n\nIn order to do this, our aim is to make it easier for people and businesses\ + \ to co-pay with their CRC & BER by enabling Euros-e payments and multi-token display\ + \ of balances. The Circles Coop will leverage [Monerium](https://monerium.com/)’s\ + \ Euro-e stable coin, running on Gnosis, to develop a product that allows businesses\ + \ to withdraw and deposit Euro-e tokens to and from their [circles.garden](https://circles.garden/)\ + \ safe wallet. Monerium is a SEPA authorised and regulated Euro stable coin. Users\ + \ of Circles will be able to open a Monerium account with an IBAN to deposit Euro-e\ + \ tokens to their Circles safe in order to use the open co-payment API functionality\ + \ that we will develop. Businesses can sell things at a discount in Euros and benefit\ + \ from higher sales experienced from participating in the Circles network. The Euro-e\ + \ fee revenues generated are transparent and can be split as distributed equity\ + \ for Circles users within the web of trust, for the pilot business costs and to\ + \ cover the Coop's operational costs in order to break even. The end result is fully\ + \ distributed credit issuance and internal liquidity provision made possible by\ + \ the Circles mesh credit p2p protocol and distributed equity through the revenues\ + \ generated from trade and investments to real production in the form of co-payment\ + \ fees & community investment in BER.\n\nThe proposal would be to fund the Circles\ + \ Coop with 1.2 million EUR from the moment this proposal becomes effective for\ + \ a period of 12 months to:\n\n* develop the co-payment API functionality in the\ + \ [circles.garden](https://circles.garden/) client and [marketplace](https://market.joincircles.net/en)\ + \ with Euro-e and BER\n* Enable Euro-e, BER & CRC multi-token displays.\n* develop\ + \ the BER/Euro-e exchange functionality for the Berlin pilot (500k EUR)\n* Research\ + \ & Development (see below)\n\nPart of this budget will be assigned by the Circles\ + \ Coop to the [Bitspossessed](https://bitspossessed.org/) developer collective (600k).\ + \ The Bitspossessed have been responsible for maintaining and developing the core\ + \ Circles UBI infrastructure and client (circles.garden) since [Sarah Friend](https://isthisa.com/)\ + \ and [Andreas Dzialocha](https://adz.garden/) co-founded the Bitspossessed after\ + \ technicaly launching CirclesUBI in October 2020, with the unconditional support\ + \ from [Martin Koppelmann](https://twitter.com/koeppelmann). As the Circles Protocol\ + \ is non-for-profit and meant to be a commons, the project relies on grants and\ + \ public/private donations for its operations at scale. Having a budget for core\ + \ development secured by the GnosisDAO will ensure the continued success of the\ + \ project and group currencies as a whole. The Circles Coop's operational non-development\ + \ costs will be secured by external private donations while the revenues generated\ + \ from BER and co-payments are established, tested and proven to work. The Circles\ + \ Coop aims to develop an open reproducible revenue model that allows other organised\ + \ cooperatives, businesses and groups doing Circles to earn a revenue and break-even\ + \ from fees in Euro-e/fiat co-payments, fiat withdrawals and deposits and group\ + \ currency exchange fees.\n\nOur end goal and vision for the future is to develop\ + \ a multi-currency p2p privacy-preserving payment app that brings investment for\ + \ local economies to thrive everywhere via CirclesUBI.\n\nThe Circles Coop eG commits\ + \ to sharing the progress, main learnings and achievements in Q3 of 2024 before\ + \ applying to further funding from the GnosisDAO community.\n\nFrom mid 2024 to\ + \ 2025, our aim is to develop with others in the ecosystem a Community Currency\ + \ Exchange as a stand-alone product to decentralise and incentivise investment in\ + \ group currencies in a privacy-preserving way. You can read more about the Circles\ + \ Coop [here](https://circles.coop/) and about our recent work on anonymous circles\ + \ or the Circles [Entropy Black Paper](https://circlesentropy.github.io/blackpaper/).\n\ + \nResearch\n\nIn order to understand better what the different risk profiles and\ + \ trade-offs of group currencies will be, we would like to include a budget to fund\ + \ the research work of BlockScience and Circles Coop Research team, who will work\ + \ in understanding and modelling what effects will the introduction of group currencies\ + \ have on the Circles web of trust network as a whole, providing a \"digital twin\"\ + \ of Circles with the capacity to perform deterministic backtesting and to perform\ + \ extrapolation under stylized scenarios. One of the product outcomes of research\ + \ is to determine, using network science, when an account is a real person or not\ + \ and create the necessary metrics and detection mechanisms for sybil resistance.\ + \ To that end, we request a total of 100k EUR to fund the great work of [Blockscience](https://block.science/)\ + \ and the Circles Coop research team for a period of six months.\n\nTimeline for\ + \ Circles Coop:\n\nResearch and Design (3 months): includes market research, design\ + \ research, design work on ideation, mock-ups for new features, user stories, risk\ + \ management on legal and economic fronts, network science and agent based modelling\ + \ research, fine tuning business model, ongoing maintenance, stabilisation and improvement\ + \ of technical infrastructure. Additionally, here we will review and do an audit\ + \ of the group currency contracts to make sure everything is secure before deployment.\n\ + \nDecision-Making and Planning Implementation (1 month): Systematize and cross-analyze\ + \ all the information gathered. Establish a common roadmap in all domains to implement\ + \ agreed features, prepare campaigns for general users, improve Coop's BER minting\ + \ and EUR redeeming procedures, start with design research for [marketplace](http://www.market.joincircles.net)\ + \ integration, ongoing maintenance and stabilisation of technological infrastructure.\n\ + \nFeatures Development and Implementation Phase 1 (3-4 months): Launch campaign\ + \ to prepare users for new features. Work on the feature of multi-token display\ + \ to start users getting used to this possibility, preparing circles.garden backend\ + \ and marketplace for co-payment API. Test, adjust and launch first features. Design\ + \ processes and platforms for community investment. Prepare a communication campaign\ + \ to reach out to community investors. Ongoing maintenance and stabilisation of\ + \ technological infrastructure. \n\nFeatures Development and Implementation Phase\ + \ 2 (3-4 months): Developing, testing and launching co-payment API features both\ + \ on circles.garden and the marketplace. Campaign to introduce co-payment and start\ + \ introducing economic justice/social investment narrative. Ongoing maintenance\ + \ and stabilisation of technological infrastructure. Lastly, work will go into research\ + \ and design of a currency exchange platform for Q3 2024.\n\nMilestones: \n\nQ1:\ + \ first stage of Group Currency research completed, GC contract audits fully done.\ + \ \n\nQ2: Design of features and workflows of GC \n partially completed. Architecture\ + \ & spec for payment API defined. \n\nQ3: Design of features and workflows of GC\ + \ completed. Testnet goes live to begin testing features and assumptions. Second\ + \ stage of research completed. \n\nQ4: Group Currency and co-payments implemented\ + \ on the circles.garden wallet and marketplace \n\n\n Budget\n\nTo summarise, the\ + \ breakdown of the total budget of this proposal will be assigned as follows:\n\n\ + To Proof of Humanity Origin Team:\n\n* 500k EUR for POH group currency. This liquidity\ + \ belongs to GnosisDAO and will go to the users of POH directly. The idea is to\ + \ provide liquidity on PHC (Proof of Humanity Circles). The money will be used to\ + \ build a liquidity position of DAI-PHC.\nSince there wouldn't be any liquidity\ + \ initially, the POH team will need to buy it overtime to avoid slippage, for around\ + \ 50k€ of PHC over 5 months.\nThe POH team can handle those operations and then\ + \ send the liquidity tokens to the GnosisDAO.\nGiving the exact operations may be\ + \ hard as price of PHC may vary.\n\nProof of Humanity's Gnosis Chain Safe: 0x636a9f58182B8132A08777A8De0Ca0f63bc0C3aa\n\ + \nTo Circles Coop e.G.:\n\n- 100k EUR for Research collaboration with Blockscience\ + \ and the Circles Coop Research team (July 2023 to June 2024). Paid in DAI or USDC.\n\ + \n- 600k EUR for the Bitspossessed CirclesUBI Dev Team (July 2023 to June 2024).\ + \ Paid in DAI or USDC.\n\nBerlin CirclesUBI Pilot:\n\n* 500k EUR for BER Pilot -\ + \ as a commitment to exchange the Group currency (BER) for DAI or USDC. This liquidity\ + \ belongs to GnosisDAO and will go to the businesses in the pilot directly. The\ + \ BER minted will be sent to the Gnosis Treasury team in exchange for the stable\ + \ coin at a fixed rate of ~10 BER to 1 Euro with a small discounted exchange fee\ + \ as incentives for merchants. In the future proposals to GnosisDAO, we plan to\ + \ create a social dex (community currency exchange) to allow for different forms\ + \ of mutual staking, direct loans to the B2B network and more, in order to make\ + \ the operation economically sustainable.\n\nCircles Coop's Gnosis Chain Safe: 0xd9B58990cef69c2d222fD8f8CAf53477C5B79E28\n\ + \nTotal:\n\n1.7 million EUR for a period of one year.\n\nA more detailed cost breakdown\ + \ is given [here](https://docs.google.com/spreadsheets/d/1ORy9d2pw7IJoub05s5MuVLBD3kRyUqpQmJnMG1KhdR4/edit#gid=1813060761).\ + \ \n\nFunding should be given for the respective team public addresses present in\ + \ this proposal.\n\nWe look forward to our collaboration.\n\nCircles Coop e.G &\ + \ Proof of Humanity Origin" +start: 1688964263 +end: 1689569063 +state: closed +author: '0x04B86C77271B97EF30AEc9eFB5d4cbC805144a7A' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 56025.21448664428 +scores: + - 29007.3067727236 + - 27001.41504120799 + - 16.492672712679905 +votes: 338 +quorum: 0 +funding: + amount: 1,700,000 + currency: EUR + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-89.yml b/public/GIPs/GIP-89.yml new file mode 100644 index 00000000..37b2cd81 --- /dev/null +++ b/public/GIPs/GIP-89.yml @@ -0,0 +1,156 @@ +id: '0x68d88244f7f1f10d15441a4894ff77ba595dbbed645b2ce0718604b14b96526a' +gip_number: '89' +url: https://snapshot.org/#/gnosis.eth/proposal/0x68d88244f7f1f10d15441a4894ff77ba595dbbed645b2ce0718604b14b96526a +title: Should GnosisDAO support an annual renewal for Blockscout SLA and hosting services? +body: 'Blockscout continues to serve the Gnosis ecosystem with an open-source explorer + for both the Gnosis mainnet and Chiado testnet instances. Blockscout hosting was + originally funded in GIP 54 for mainnet and GIP 71 for the Chiado testnet. + + + Over the past year, Blockscout has attracted and retained Gnosis users and developers, + providing a valuable explorer option and needed redundancy for chain exploration. + While Gnosis mainnet users can choose Gnosisscan or Blockscout for their exploration, + contract verification, and API needs, Blockscout is currently the only full-featured + explorer serving the Chiado execution layer. + + + While Blockscout usage is down somewhat from its peak when it was the only explorer + option for the chain, many users still prefer Blockscout. A few high level statistics + from GA & Mixpanel: + + + ~45K monthly views, 9.5K MAU for Gnosis Mainnet Blockscout instance. + + ~100 contracts verified in the previous month using Blockscout. + + ~1,000 signups to myAccount since the feature was introduced. + + ~550 Marketplace views over the previous month. + + ~7K monthly views for Chiado. + + Additional chain stats (not instance specific) are available at Gnosis chain statistics + | Blockscout. + + + Over the past year Blockscout has focused on optimizations and improvements which + have been upstreamed to the Gnosis instances on a priority basis. These include + a complete UI overhaul, multiple indexer upgrades, advanced statistics and the new + MyAccount and Dapp Marketplace features. + + + Updates scheduled for the upcoming year include: + + + Advanced filtering and sorting options + + Human readable transactions + + NFT views and explorer improvements + + Smart search with AI + + More Rust-based microservices + + Support for ENS and ENS forks + + + Project Deliverables + + + Continue to maintain Blockscout instances for Gnosis Chain and Chiado testnet on + Blockscout’s premises + + Hosting services for the Gnosis Chain and Chiado testnet (for a period of 1 year + with an option to extend) + + Hosting at blockscout.com (for a period of 1 year with an option to extend) + + Premium feature updates + + Priority SLA to ensure uptime and troubleshoot any issues with Gnosis development + team + + Support for end-users of the explorer managed via Discord + + + Execution Timeline + + + Start time + + + Proposed start time for the renewal is October 1, 2023. + + + Previous services for the hosted mainnet instance began on July 17, 2022 and officially + expired on July 18, 2023 (per GIP 54) . Since that time we have hosted the mainnet + instance at our own cost. We propose crediting 2 weeks (July 18-July 31) and receiving + back payments for 2 months (August and September) of hosting services in addition + to the new annual engagement cost. + + Previous payment for the Chiado testnet was received on November 29, 2022 and scheduled + to extend through Nov 29, 2023. We propose reducing the time for this support by + 2 months, so that the new engagement can begin and end at the same time as mainnet. + + New proposed timeline: Gnosis Mainnet and Chiado testnet will be supported from + October 1, 2023 - October 1, 2024. + + If the proposal is still in consideration on Oct 1 but no final decision has been + made, hosting and support will continue without interruption until the governance + process is completed, and the timeline will be amended accordingly. + + + Funding & Disbursement + + + Hosting costs cover high-capacity bandwidth, infrastructure upgrades, data storage + (2000GiB and growing), and devops for the networks. Feature enhancements and priority + support are also included as part of the package. + + + Over the past year we have analyzed instance usage and optimized our backend infrastructure + and processes, and are happy to offer a discount on pricing for the instances ($500 + less per month relative to 2022 pricing). Chiado testnet pricing is scoped as a + 2nd instance, resulting in a lower cost. + + + Gnosis Chain Mainnet: $112,000.00 + + + $8,000 per month for 14 months (August and September 2023 + 1 year of service 1 + October, 2023 - 1 October, 2024) + + Chiado Testnet: $40,000 + + + $4,000 per month for 10 months (credit of October and November 2023 + 1 year of + service 1 October, 2023 - 1 October, 2024) + + Total cost: $152,000.00 due 1 October, 2023 + + + Amount is requested up front for the year. Payment can be made to Blockscout’s SAFE + 0xAddress on Ethereum mainnet (0x242ba6d68FfEb4a098B591B32d370F973FF882B7) with + USDC or USDT.' +start: 1695121888 +end: 1695726688 +state: closed +author: '0x88a98e77B61397DFb4386c81A4997e7F2079F2A9' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 79417.69397070853 +scores: + - 79344.22448151269 + - 1.3987814300711263 + - 72.07070776573612 +votes: 361 +quorum: 0 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-9.yml b/public/GIPs/GIP-9.yml new file mode 100644 index 00000000..da33d6fd --- /dev/null +++ b/public/GIPs/GIP-9.yml @@ -0,0 +1,106 @@ +id: QmcQjdevt8Ue2P4XSKFY8PehLBRbPmambJRgeugYeC31zV +gip_number: '9' +url: https://snapshot.org/#/gnosis.eth/proposal/QmcQjdevt8Ue2P4XSKFY8PehLBRbPmambJRgeugYeC31zV +title: Launch Liquidity Mining program for Prediction Markets using Gnosis Conditional + Tokens +body: "\n# Summary\n\nGnosisDAO will launch a Liquidity Mining program for prediction\ + \ markets using Gnosis Conditional Tokens that would reward liquidity providers\ + \ with GNO to incentivize a curated set of markets and thus boost the use of Gnosis\ + \ Conditional Tokens.\n\n# Abstract\n\nThe GnosisDAO will allocate 120,000 GNO from\ + \ the treasury for the first 12 months of this liquidity incentivization initiative.\ + \ It will dynamically manage the GNO rewards distribution by assigning “allocation\ + \ points” to specific markets that the GnosisDAO votes on in order to stimulate\ + \ the markets with a higher participation potential or that would generate quality\ + \ predictive data for the GnosisDAO. Currently, it means incentivizing mainly liquidity\ + \ providers for Omen markets on xDai but the program would be open to any solution\ + \ using Conditional Tokens (for example, it could also incentivize ERC20 wrapped\ + \ conditional tokens on exchanges such as Uniswap, Balancer, SushiSwap, and 1inch).\n\ + \n \n\n# Motivation\n\nIn the current environment full of yield farming opportunities,\ + \ providing capital to any protocol incurs a high opportunity cost. Moreover, prediction\ + \ markets are known to be more attractive to users and more potent at predicting\ + \ events when the markets are liquid and efficient enough to allow for high-scale\ + \ arbitrage (cf. Vitalik Buterin [Prediction Markets: Tales from the Election](https://vitalik.ca/general/2021/02/18/election.html)\ + \ blog post).\n\nAnyone can add liquidity to prediction markets using Gnosis Conditional\ + \ Tokens by minting them for existing markets or even creating their own markets.\ + \ Liquidity attracts traders, trading generates prediction market fees, and ultimately\ + \ this profitability attracts more liquidity. This is a flywheel effect that has\ + \ to be incentivized within the Conditional Tokens ecosystem in order to position\ + \ ourselves in the prediction market scene.\n\nRegardless of the venue, early liquidity\ + \ providers take on more risk and opportunity costs: including contract risk, low\ + \ initial profitability, etc. Moreover, conditional Tokens users should get to participate\ + \ early on in deciding how the GnosisDAO evolves and plans to build new versions\ + \ of the Conditional Tokens.\n\nToward this end, we propose implementing a Liquidity\ + \ Mining program for prediction markets using Gnosis Conditional Tokens rewarding\ + \ liquidity providers with GNO tokens. These types of initiatives are proven to\ + \ attract significant amounts of capital into products and to kickstart a virtuous\ + \ cycle of additional liquidity (see the examples of Balancer, Sushiswap, and 1inch)\ + \ and thus improved user experience and efficiency which will, in turn, bring more\ + \ usage to Conditional Tokens.\n\nThe indirect benefits of this program for the\ + \ GnosisDAO are multiple:\n\n- Fostering the use of one of Gnosis core products\ + \ (CT framework).\n \n- Upgrading the distribution of GNO by rewarding it to\ + \ valuable community members.\n \n- Improving the quality of data generated\ + \ by prediction markets using CT.\n \n\nThe potential direct benefits to the\ + \ GnosisDAO are just waiting to be unlocked by the governance. In the future, it\ + \ could take the form of the implementation of a redemption fee mechanism embedded\ + \ into the Conditional Tokens framework, or of a trading fee in exchanges controlled\ + \ by the GnosisDAO. Legacy prediction markets like PredictIt charge significant\ + \ fees (10% of the profit on a market and 5% of withdrawals), blockchain prediction\ + \ markets like Augur or Cover charge a smaller redemption fee (~1% for Augur and\ + \ 0.1% for Cover). As long as the GnosisDAO provides continuous support and development\ + \ for Conditional Token, a small fee will probably be accepted by the users.\n\n\ + It would also be possible for the GnosisDAO to find novel revenue sources around\ + \ Conditional Tokens. For example, frontends controlled by the GnosisDAO could also\ + \ allow users to burn some GNO in order to have their markets displayed in more\ + \ attractive positions of the UI.\n\n# Specification\n\nThe GnosisDAO liquidity\ + \ mining program for prediction markets using Conditional Tokens will be inspired\ + \ by Balancer and SushiSwap liquidity mining programs.\n\n \n\nFor the first year\ + \ 120,000 GNO tokens, or 10,000 per month, will be distributed to liquidity providers\ + \ staking their conditional tokens liquidity into the GnosisDAO liquidity mining\ + \ contracts. For networks other than Ethereum mainnet (in particular xDAI), those\ + \ GNO tokens would be wrapped on the particular network.\n\n \n\nThe amount of\ + \ GNO distributed to a particular liquidity pool will be determined by an allocation\ + \ point system. The GNO will be distributed between pools in proportion to their\ + \ allocation points and within pools in proportion to participant liquidity. \n\ + \ \n\nFor example let’s assume there are 3 pools A, B, and C with 100, 400, and\ + \ 500 allocation points, Alice has 200 ETH of liquidity in pool A which has a total\ + \ of 500 ETH of liquidity. Alice would receive 10000*(200/500)*(100/1000)=400 GNO\ + \ per month.\n\n \n\nIn order to be able to rapidly incentivize new markets when\ + \ opportunities come up, setting up allocation points will be done through a fast-track\ + \ procedure on Snapshot which does not require going through the complete governance\ + \ procedure. \n \n\nAny account with at least 1000 GNO (from a snapshot taken\ + \ at the beginning of the month) will be able to make an allocation point proposal\ + \ each month for each 1000 GNO it holds (so an address with 3000 GNO would be able\ + \ to make 3 allocation proposals per month). Those would be put to vote instantly\ + \ with a 1 week voting period and without quorum requirements. \n \n\nAn allocation\ + \ proposal would contain:\n\n- The conditional token liquidity pool to be incentivized.\n\ + \ \n- The number of allocation points for this pool.\n \n- The start and\ + \ finish date of the incentivization.\n \n\n \n\nAllocation proposals can provide\ + \ allocation points to new pools or change the allocation of a current pool (including\ + \ setting it to 0).\n\n \n\n# Implementation\n\n \nMembers of the Gnosis team\ + \ will design/fork a liquidity mining rewards distribution contract (and its interface)\ + \ to allow for liquidity providers to stake their Conditional Tokens and claim their\ + \ rewards and set up a dedicated Snapshot space (with the >=1000 GNO proposal requirement)\ + \ to allow for allocation points proposal voting.\n\n \n\nAn explanatory thread\ + \ for the streamlined Liquidity Mining allocation points governance process will\ + \ be posted in GnosisDAO forum.\n" +start: 1619085600 +end: 1619690400 +state: closed +author: '0x4a9A2F31E2009045950DF5aAb36950609DE93c78' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 35455.90099854775 +scores: + - 29132.271626810987 + - 6323.629371736783 + - 0 +votes: 56 +quorum: 0 +funding: + amount: 120,000 + currency: GNO + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-90.yml b/public/GIPs/GIP-90.yml new file mode 100644 index 00000000..540b6ed0 --- /dev/null +++ b/public/GIPs/GIP-90.yml @@ -0,0 +1,63 @@ +id: '0x7fd56c5eb290393598d2b601913ab74f196f154bd1f6ef0261c2a7c34e096dd9' +gip_number: '90' +url: https://snapshot.org/#/gnosis.eth/proposal/0x7fd56c5eb290393598d2b601913ab74f196f154bd1f6ef0261c2a7c34e096dd9 +title: Should Gnosis.eth update its ENS resolver to resolve .GNO domains on Gnosis + Chain? +body: "### Executive Summary ###\n\n.GNO domains is launching on Gnosis Chain, with\ + \ one of the key features being a CCIP resolver that resolves .GNO domains on ENS.\ + \ For this to be implemented gnosis.eth is required to update its resolver to the\ + \ new CCIP resolver being developed.\n\n### Introduction ###\nWe at Gnosis have\ + \ been working with SpaceID, and DM3 protocol to bring .GNO domains to Gnosis. We\ + \ call it Genome.\n\nGenome’s mission is to create a digital-ID product centered\ + \ around .GNO domains, integrating the communities, dApps, and utilities native\ + \ to Gnosis chain as well as linking .GNO domains with ENS.\n\n### Product Features:\ + \ ###\n\n- .GNO domains integrated with the Gnosis ecosystem\n- Genome .GNO NFT\ + \ collection native to Gnosis\n- Developing a CCIP resolver enabling .GNO domains\ + \ to be resolved on Ethereum via ENS\n- .GNO Integration with current and future\ + \ JV (Space-ID) partners\n\nGenome is live on testnet! https://test.genomedomains.com/\ + \ \n\nENS Resolver Features:\n\nENS defines this standard where an example.eth address\ + \ can issue text.example.eth on Layer 2 (or another Layer 1 like Gnosis Chain).\ + \ With no or minimal trust assumptions. \n\nENS’ explainer on CCIP: https://docs.ens.domains/dapp-developer-guide/ens-l2-offchain\n\ + Our CCIP resolver in this case: https://github.com/dm3-org/genome-ccip-resolver\ + \ (only deployed on Gnosis testnet so far)\n\nNow, each example.gnosis.eth subdomain\ + \ will also have an example.gno domain. Those are centrally managed by Space-ID.\n\ + \nBoth are linked.\n\n.gno is resolved via https://www.npmjs.com/package/@web3-name-sdk/core\n\ + \n.gnosis.eth is resolved via an up-to-date version of ethersjs for example.\n\n\ + When I enter example.gnosis.eth in metamask - for example - the CCIP resolver contract\ + \ returns a URL to a CCIP-Read client like ethers.js. This URL can be used to perform\ + \ an off-chain lookup instead of fetching the records from the contract directly.\n\ + \nWhen calling the URL, the Gateway resolves the request by using the Gnosis RPC\ + \ provider to query the data from the SpaceId contract on the Gnosis Chain. The\ + \ data returned is signed by the gateway and then returned to the Read Client. To\ + \ add additional security, the gateway signs the response before, so only “trusted”\ + \ gateways can be used\n\n### Impact and Benefits ###\nThe main goal of Genome and\ + \ .GNO domains is increasing ease of access to new and existing users alike. With\ + \ the increasing costs of building on Ethereum, allowing .GNO domains to resolve\ + \ on ENS not only lowers costs for owning a domain but also opens up a new set of\ + \ possibilities for experimentation.\n\n### Proposed Changes / Implementation Plan\ + \ ###\nENS records for gnosis.eth need to be updated to set the resolver to Genome’s\ + \ resolver address 0xc9bf092673b3a066df088a2a911e23e9b69b82f2\n( https://github.com/dm3-org/genome-ccip-resolver\ + \ )\n\n### Team/ Organization/References ###\nRalph X., Gnosis BD\nPhilipp S., Gnosis\ + \ BD\nAlex Plutta, DM3 Protocol/Corpus Ventures\nEduardo Vega-Patiño, DM3 Protocol/Corpus\ + \ Ventures" +start: 1712913062 +end: 1713517862 +state: closed +author: '0x9dC3f992637976aB1ebADBcb3FC3e6fE94a5c8f5' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 77114.27589930757 +scores: + - 77114.15159384944 + - 0.004974602282557618 + - 0.11933085584175256 +votes: 126 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-91.yml b/public/GIPs/GIP-91.yml new file mode 100644 index 00000000..fcd241e6 --- /dev/null +++ b/public/GIPs/GIP-91.yml @@ -0,0 +1,141 @@ +id: '0xa779ccda18ee2aeb56894e8b5baafd3d2568e99b0fea4a03dd246f548084a93c' +gip_number: '91' +url: https://snapshot.org/#/gnosis.eth/proposal/0xa779ccda18ee2aeb56894e8b5baafd3d2568e99b0fea4a03dd246f548084a93c +title: Should the GnosisDAO onboard into Centrifuge Prime? +body: "Executive Summary\nThis proposal initiates the onboarding of GnosisDAO into\ + \ Centrifuge Prime by investing part of the treasury into Real-world assets (RWAs).\ + \ The onboarding will be contingent upon the establishment of a Legal Conduit for\ + \ GnosisDAO by Centrifuge for the safe investment of RWAs. This proposal will integrate\ + \ existing treasury management processes and services providers such as karpatkey\ + \ DAO. The benefit of this proposal will provide the GnosisDAO Treasury with an\ + \ additional diversified source of yield, a resilient legal infrastructure for engaging\ + \ with RWA investments, and access to additional diversified sources of credit through\ + \ Centrifuge.\n\nService Description\nThis proposal initiates the onboarding of\ + \ GnosisDAO into Centrifuge Prime to invest part of the treasury into RWAs. Centrifuge\ + \ will provide the services to establish a legal structure that supports safe RWA\ + \ investments, integrates GnosisDAO’s treasury management processes, establishes\ + \ any technical integrations needed, and facilitates the curation of a diversified\ + \ investment portfolio.\n\nOnce established, this proposal targets an initial allocation\ + \ of $10m USD into Centrifuge Prime, through pools such as Anemoy LTF, New Silver\ + \ 1, and other available pools.\n\nCentrifuge has been collaborating closely with\ + \ karpatkey DAO and GnosisDAO contributors on a variety of RWA initiatives within\ + \ the Gnosis ecosystem. Beyond bringing new exposure to the GnosisDAO treasury,\ + \ possible ideas include:\n\ndeploying Centrifuge Liquidity Pools directly on Gnosis\ + \ Chain;\nleveraging the Centrifuge Securitization Engine for the issuance of unique\ + \ pools for the Gnosis community; and\nexploring deeper partnerships with specific\ + \ parties and efforts inside the Gnosis ecosystem.\nWe view this proposal as the\ + \ first step in bringing the Gnosis and Centrifuge ecosystems more closely together\ + \ and establishing a flourishing partnership for Real World Assets in DeFi and Gnosis\ + \ Chain.\n\nKey aspects\nThis proposal will accomplish:\n\nEstablishing a Legal\ + \ Conduit for the safe investment of real-world assets.\nIntegrating the existing\ + \ treasury management process to utilize this conduit.\nFacilitating ongoing management\ + \ tasks including portfolio and asset curation, reporting via the Centrifuge Credit\ + \ Group, and dedicated technical and user support.\nThe Legal Conduit\n\nThe legal\ + \ structure will be integrated with DAO governance to ultimately be owned and operated\ + \ by GNOtoken holders. The principle idea behind the structure is to establish an\ + \ entity that is capable of signing and fulfilling legal agreements on behalf of\ + \ the DAO, ultimately enabling GnosisDAO’s path to legal recourse. This provides\ + \ a high degree of reliability and security for RWA investments, without compromising\ + \ the principles and position of the DAO.\n\n\n1600×936 178 KB\nThis framework is\ + \ based on our extensive experience in MakerDAO setting up similar 1 structures.\ + \ There, the same structure supports a >$1B in deployed capital.\n\nWhile the legal\ + \ conduit is initially intended to facilitate an investment by GnosisDAO into RWA\ + \ offered through Centrifuge Prime, the same structure could potentially also be\ + \ used to diversify GnosisDAO’s treasury into RWAs available through other platforms/issuers/brokers,\ + \ thereby expanding the scope of treasury management activities currently available\ + \ to the DAO.\n\nIntegrated Management Process\n\nGnosisDAO has an existing sophisticated\ + \ and high-quality non custodial treasury management process, pioneered and led\ + \ by karpatkey DAO. The services in this proposal will be fully integrated to support\ + \ the existing processes efficiently, while also supporting any future developments\ + \ within the DAO. These processes and overall structure will be developed in collaboration\ + \ with the Gnosis community.\n\nOngoing Management and Support\n\nCentrifuge Prime\ + \ provides dedicated access to the Centrifuge ecosystem and community. As part of\ + \ this proposal, the Centrifuge team will work directly with karpatkey DAO to provide\ + \ ongoing support for the RWA portfolio allocated through Prime.\n\nThis will involve\ + \ ecosystem and pipeline management with dedicated relationships to high-quality\ + \ asset managers, service providers, and other actors necessary to maintain and\ + \ curate a diversified RWA portfolio. The Centrifuge Credit Group, a DAO entity\ + \ setup to provide risk and credit analysis, can be utilized to provide general-purpose\ + \ reporting for investors. This provides an additional level of ongoing monitoring\ + \ and independent analysis for karpatkey DAO and the community to utilize.\n\nFinally,\ + \ Centrifuge is committed to providing technical and user support to the Gnosis\ + \ community. This includes community education and engagement, support for technical\ + \ integrations, and dedicated support to the investment and portfolio management\ + \ team.\n\nBeyond US treasuries, the Centrifuge Prime setup would also allow the\ + \ Gnosis DAO to allocate into the following asset classes:\n\nBucket Focus\tDescription\t\ + Targeted Returns\tLiquidity Thresholds\nLiquidity\tLowest risk while maintaining\ + \ US Treasuries, MMF, AA+ rated short term bonds\t5-6%\tDaily\nPreservation\tInvestments\ + \ in senior secured loans such as real estate, corporate bonds etc.\t6-8%\t3-6 months\n\ + Acceleration\tTrade finance, non-bank originators, emerging markets\t8-20%\t3-24mo\n\ + Service Scope - Describe the scope of the service, including any limitations or\ + \ exclusions that apply.\nThe scope of services described above intends to cover\ + \ the RWA investments made through Centrifuge Prime.\n\nService delivery - Give\ + \ an overview of how the service will be delivered, including any key processes,\ + \ procedures, or technologies.\nThe process for establishing the legal conduit is\ + \ as follows:\n\nThe Centrifuge contributor team will retain external legal counsel\ + \ in the Cayman Islands to represent the Gnosis DAO’s interests. The results of\ + \ this work will be presented to the Gnosis DAO, and the community will have time\ + \ to process, provide feedback, and otherwise request changes in the legal structure.\ + \ The structure will only be implemented and executed with DAO approval, via the\ + \ requisite process as requested by the community.\n\nThe follow-on processes and\ + \ procedures will be developed over further collaboration with the community.\n\n\ + Support - Provide a brief description of the support services that are provided.\n\ + The support services are mentioned above.\n\nPricing and payment\nThe pricing for\ + \ this proposal is structured to streamline fees. The usage of GNO as a reward helps\ + \ to align incentives towards long-term interests versus short-term benefits.\n\n\ + The fee structure is as follows:\n\nFees\t\t\nStructural Setup\tup to 50,000 USDC\t\ + To be paid immediately into a Safe controlled by Centrifuge to pay for lawyers and\ + \ Cayman service providers to set up a Cayman foundation company to the benefit\ + \ of the Gnosis DAO, any unused budget will be returned to the GnosisDAO treasury.\ + \ The structure may require ongoing fees but will be assessed on a periodic basis\ + \ and only after approval from the DAO.\nPortfolio Fee\t0.35% p.a. on assets in\ + \ Prime up to $50M, 0.2% $50-100M, 0.1% >$100M\tAccrued on an ongoing basis to Centrifuge\ + \ for maintenance and support and payable upon redemption.\nGnosis Rewards\t250\ + \ GNO, paid incrementally over 12 months into the Centrifuge treasury, starting\ + \ with the first $1M Deployment into Centrifuge Prime. GNO would be locked for a\ + \ period of 12 months.\tTo cover costs of resource and facilitation time for the\ + \ development of the infrastructure and processes. Centrifuge DAO intends for this\ + \ to create better alignment with strong skin in the game incentives for success.\n\ + Service Terms and Exit Strategy\nCentrifuge Prime can be unwound and offboarded\ + \ with 30 days’ notice. The positions and structures can be off-boarded entirely\ + \ or transferred to new ownership. Investments themselves will be subject to the\ + \ policies of the investment contract, but can also be unwound.\n\nTeam/Organization\n\ + Centrifuge has a long track record of working with DAOs to bring RWAs on as collateral.\ + \ Notable firsts include minting MakerDAO’s first real-world asset, structuring\ + \ the first on chain securitization, launching the RWA Market with Aave, and partnering\ + \ with BlockTower to bring the first credit fund operations on chain. Centrifuge\ + \ Prime is built for the needs of large decentralized organizations. It provides\ + \ the infrastructure and services to quickly and easily onboard and scale a fully\ + \ diversified portfolio of real-world assets. Through Centrifuge Prime, decentralized\ + \ organizations can get access to an institutional ecosystem of RWA partners and\ + \ service providers.\n\nCentrifuge is a DAO-governed protocol. K/Factory contributes\ + \ to the Centrifuge protocol by providing development, and infrastructure, and working\ + \ with users to ensure adoption.\n\nMore contributor information can be found on\ + \ the Centrifuge website 2.\n\nConclusion\nThis proposal represents a significant\ + \ step forward for the Gnosis community in its RWA engagement. Centrifuge Prime\ + \ is an optimal solution for developing a diversified RWA portfolio that the DAO\ + \ can integrate into its existing treasury management solutions. Centrifuge has\ + \ collaborated with karpatkey DAO on the development of this proposal and, with\ + \ support from the Gnosis Community, would like to continue this collaboration to\ + \ add additional exposure to the GnosisDAO treasury." +start: 1705933196 +end: 1706537996 +state: closed +author: '0xa9D7713e49d2931f12019D3179ccCf7F60F02BC7' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 107428.16584046364 +scores: + - 104191.18782628604 + - 8.34195429587821 + - 3228.636059881722 +votes: 300 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-92.yml b/public/GIPs/GIP-92.yml new file mode 100644 index 00000000..db28d791 --- /dev/null +++ b/public/GIPs/GIP-92.yml @@ -0,0 +1,158 @@ +id: gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token +gip_number: 92 +url: https://forum.gnosis.io/t/gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token +title: Should Gnosis DAO spin-off karpatkey DAO and deploy the KPK Token? +body: "## Abstract\n\nkarpatkey has led the active DAO treasury management space after\ + \ becoming GnosisDAO’s treasury manager in [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ + \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417).\ + \ Following the tradition of the sister projects [CowDAO](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735)\ + \ and [SafeDAO](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ + \ karpatkey will launch a DAO spin-off and a governance token (KPK) from the GnosisDAO.\n\ + \nWe also put forward a $2.5 million investment proposal to GnosisDAO. In exchange\ + \ for this investment, GnosisDAO would receive 1.25% of KPK full supply, valued\ + \ at $200 million. *A 1.25% GNO-KPK token swap would also be arranged at the same\ + \ $200 million valuation, with a 5-year vesting period for the tokens.\n\nkarpatkey\ + \ will allocate 5% of its airdrop to GnosisDAO, bringing GnosisDAO’s total stake\ + \ in KPK to 10% of the fully diluted supply.\n\n# Introduction\n\nWe’re ending the\ + \ first three years of karpatkey with many validated learnings and an exciting roadmap.\n\ + \nOur [2022](https://forum.gnosis.io/t/karpatkey-2022-year-in-review-for-gnosis/6431)\ + \ and [2023](https://forum.gnosis.io/t/karpatkey-2023-year-in-review-for-gnosis/8016)\ + \ contributions to the GnosisDAO have been essential in developing the Gnosis Chain\ + \ and GnosisDAO’s treasury, improving the long-term value of GNO.\n\nWe’ve become\ + \ the leaders in active DAO treasury management and on-chain, non-custodial asset\ + \ management. karpatkey has established a strong network of DAO treasuries with\ + \ dedicated finance working groups for GnosisDAO, Balancer, ENS, CoW, Lido, and\ + \ Aave. We’ve also contributed to Uniswap, Spark/MakerDAO, Safe, and Arbitrum by\ + \ establishing delegate platforms and conducting paid research.\n\nkarpatkey has\ + \ been working in the most adversarial blockchain environment—where any vulnerability\ + \ is bound to be exploited—and has been exposed to multiple market volatility cycles.\ + \ We have resisted mostly because of our prudent, rigorous risk management approach\ + \ and long-term sustainable strategies.\n\nWe’ve executed +7000 DeFi interactions\ + \ with zero funds lost or hacked and actively protected our treasuries for +$900m.\ + \ We’ve improved the risk management infrastructure and tooling for our asset managers,\ + \ building the foundation for our alpha.\n\nOur past activity has ultimately generated\ + \ objective knowledge across the Ethereum ecosystem and DeFi protocols, which we’ve\ + \ used to contribute to the development of roadmaps and building and maintaining\ + \ [structural tooling](https://github.com/karpatkey) for non-custodial on-chain\ + \ treasury and asset management, and risk management infrastructure to secure institutional\ + \ investment-grade funds.\n\nHaving validated our market-fit, it’s time to take\ + \ karpatkey to the next level.\n\nLike [COW DAO](https://forum.gnosis.io/t/gip-13-phase-2-cowdao-and-cow-token/2735)\ + \ and [Safe DAO](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ + \ we intend to launch our DAO spinoff from the GnosisDAO and issue our governance\ + \ token.\n\n## Our Mission\n\n[![](https://forum.gnosis.io/uploads/default/optimized/2X/d/dacc95f79d75599b233b80f7d2f8126b47e1c37d_2_438x428.png)805×788\ + \ 73.7 KB](https://forum.gnosis.io/uploads/default/original/2X/d/dacc95f79d75599b233b80f7d2f8126b47e1c37d.png)\n\ + \nAs traditional finance [embraces digital assets](https://www.sec.gov/news/statement/gensler-statement-spot-bitcoin-011023)\ + \ and [onboards assets](https://app.rwa.xyz) on-chain, it is imperative that DeFi\ + \ protocols manage financial resources to maximise token holder value and ensure\ + \ the capital necessary to maintain a sound, resilient, and innovative ecosystem.\ + \ Everybody in our industry talks about banking the unbanked. However, nobody talks\ + \ about banking DeFi protocols.\n\nBanking DeFi is what karpatkey does. We provide\ + \ financial services to the leaders in each DeFi category, creating network effects\ + \ and robustness for their users, and the DeFi ecosystem as a whole.\n\n## Our Values\n\ + \nWe’ve inherited Gnosis’ commitment to core values like decentralisation, open-source\ + \ collaboration, and ethically sound contributions to the Ethereum ecosystem.\n\n\ + The following are the principles that guide the way we behave as a community and\ + \ help shape karpatkey’s decision-making process:\n\n * **Simplicity** : We operate\ + \ in highly complex and unpredictable environments, so we think first principles\ + \ and execute at the right abstraction level to reach the shortest path to the solution.\n\ + \n * **Focus** : We live by the Pareto Principle, so we pragmatically prioritise\ + \ tasks for maximum short-term output. This means we mindfully choose continuous\ + \ improvement over delayed perfection.\n\n * **Altruism** : We cultivate long-lasting\ + \ and value-based relationships. This requires us to put in the effort without expecting\ + \ any short-term ROI. It involves shifting the focus from diminished self to collective\ + \ compounded returns.\n\n * **Ownership** : We trust each other to do and be more,\ + \ encouraging and valuing personal initiative. We decentralise decision-making,\ + \ equipping team members with the information, agency, and confidence to make good\ + \ decisions for the organisation on their own.\n\n * **Collaboration** : We care\ + \ for each other and explore new ways to continually grow our business through teamwork.\ + \ We learn from and challenge one another, sharpening existing skills and learning\ + \ new ones. We believe cognitive diversity generates better decisions.\n\n * **Curiosity**\ + \ : Status quo is not an acceptable argument—we question concepts and processes\ + \ to improve. We understand that exploring the possibilities is the only path leading\ + \ to progress.\n\n * **Adaptability** : We thrive in uncertain environments by\ + \ avoiding overfitting and adjusting to short, iterative execution cycles. We assess\ + \ and experiment rapidly, frequently, and economically, embracing every failure\ + \ as a learning opportunity.\n\n * **Selflessness** : The community is above the\ + \ individual, so when debating internally, we leave our egos outside and let the\ + \ best idea win.\n\n * **Rigour** : We acknowledge that our job has greater consequences,\ + \ so we perform at the highest level of quality, care, and professionalism.\n\n\n\ + \n\n# KPK Token\n\n## Utility & Supply\n\nThe goal of the KPK token is to align\ + \ the parties actively contributing to the delivery of karpatkey’s mission. KPK\ + \ will be a governance token to define karpatkey treasury parameters, budgets, OTC\ + \ deals, buybacks, and M&A deals.\n\nThe full supply will be 1 million KPK and non-transferable\ + \ for the foreseeable future.\n\n## Distribution\n\n[![image](https://forum.gnosis.io/uploads/default/optimized/2X/f/fae58c034a2ab75b51782801590e2a7bebad382f_2_690x356.png)image976×504\ + \ 35.5 KB](https://forum.gnosis.io/uploads/default/original/2X/f/fae58c034a2ab75b51782801590e2a7bebad382f.png\ + \ \"image\")\n\n * **Founders/Early Contributors** : Initial full-time contributors\ + \ who invested at a $20 million valuation.\n\n * **GnosisDAO Early Investment**\ + \ : $1 million investment at a $50 million valuation in [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233).\n\ + \n * **Team** : 37% of the total Team’s projection has already been allocated to\ + \ team members (currently under a vesting schedule), and the rest will be distributed\ + \ to the future team.\n\n * **Future Fundraising** : Allocated to strategic investors.\n\ + \n * **Airdrops** : Incentives used to boost the adoption of karpatkey and increase\ + \ TVL for our future funds.\n\n * **Treasury Core Units** : Teams working with\ + \ our Finance Working Groups, not included in the Team’s budget.\n\n * **Partners**\ + \ : Organisations contributing to our vision.\n\n * **M &A allocation**:\n\n \ + \ * Token swaps with our DeFi protocol treasuries;\n * Equity or token swaps\ + \ for strategic projects building Risk Management tooling, Asset Management infrastructure,\ + \ and DeFi financial services; and\n * Convertible Collateral to source DeFi\ + \ assets from treasuries for market-making and bootstrapping ETF-like products.\n\ + \ * **Treasury Reserve** : Used as collateral and liquidity for various purposes.\n\ + \n\n\n\n# How does Gnosisdao benefit from this proposal?\n\nGNO token holders benefit\ + \ from substantial ownership in karpatkey thanks to GnosisDAO’s investment, a future\ + \ airdrop proportional to the [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ + \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417)\ + \ expenditures, and by being a leader in the DeFi treasury network we’re building.\n\ + \n# GnosisDAO’s Investment and Token Swap\n\nGnosisDAO acquired 2.5% of karpatkey\ + \ in January 2022 with the passing of [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ + \ at a $50 million valuation. We propose to increment +2.5% ownership through:\n\ + \n * A $2.5 million investment for 1.25% ownership at a $200 million valuation;\ + \ and\n * *A $2.5 million GNO-KPK token swap for 1.25% ownership at a $200 million\ + \ valuation, with a 5-year vesting period.\n\n\n\nGNO token holders benefit from\ + \ substantial ownership in karpatkey thanks to GnosisDAO’s investment, a future\ + \ airdrop proportional to the [GIP-20](https://forum.gnosis.io/t/gip-20-karpatkey-dao-treasury-management/2233)\ + \ and [GIP-58](https://forum.gnosis.io/t/gip-58-karpatkey-dao-service-extension/5417)\ + \ expenditures, and by being a leader in the DeFi treasury network we’re building.\n\ + \nAdditionally, GnosisDAO will be allocated 5% of KPK tokens through the karpatkey\ + \ airdrop. Bringing GnosisDAO’s total KPK stake to 10% of the fully diluted supply.\n\ + \n## Disclaimer\n\nThe plans outlined in this proposal are for discussion purposes\ + \ only and can be subject to further changes. They may also need to be (re)structured\ + \ to account for legal, regulatory, or technical developments as well as governance\ + \ considerations. This document should not be construed as an offering of securities,\ + \ taken as the basis for making investment decisions, nor be construed as a recommendation\ + \ to engage in any transactions. You are solely responsible for your own investment\ + \ decisions and transactions.\n\nThe decision to spin out karpatkey and to launch\ + \ a KPK token lies solely with the Gnosis DAO. Consequently, this document only\ + \ describes the token launch process and its technical implementation as currently\ + \ envisaged.\n\n## *Update September 2024 - Modifications to GIP-92 phase-2\n\n\ + The initial proposal called for GnosisDAO to invest $5M in karpatkey through a $2.5M\ + \ stablecoin investment and a $2.5M GNO-KPK token swap.\n\nHowever, given the current\ + \ market conditions and the undervaluation of GNO, we propose replacing the token\ + \ swap with a $2.5M USDC investment. To reinforce our commitment to GNO, karpatkey\ + \ will allocate 10% of its total revenue over the next 12 months to purchasing GNO\ + \ in the open market, which we estimate will add +$2M GNO to our treasury. Purchases\ + \ will be made at our discretion and included in monthly reports to maintain transparency.\n\ + \nThe final GIP-92 structure consists of a $5M investment for 2.5% ownership at\ + \ a $200M valuation, with an additional 5% ownership through an airdrop, totalling\ + \ 7.5%. The total ownership of the Gnosisdao will amount to 10%.\n\n50 Likes\n\n\ + **[next page →](/t/gip-92-should-gnosis-dao-spin-off-karpatkey-dao-and-deploy-the-kpk-token/8115?page=2)**\n" +start: 1708027248 +end: null +state: [] +author: '<karpatkey>' +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: 2,500,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-93.yml b/public/GIPs/GIP-93.yml new file mode 100644 index 00000000..9ae37fe8 --- /dev/null +++ b/public/GIPs/GIP-93.yml @@ -0,0 +1,128 @@ +id: '0x33484aae7734d8e184841964636de96e1a7d4fd8b4666f2bd3dee38175be38f3' +gip_number: '93' +url: https://snapshot.org/#/gnosis.eth/proposal/0x33484aae7734d8e184841964636de96e1a7d4fd8b4666f2bd3dee38175be38f3 +title: Should GnosisDAO support the integration of Hashi within Gnosis Chain’s Canonical + Bridges? +body: "https://forum.gnosis.io/t/gip-93-should-gnosisdao-support-the-integration-of-hashi-within-gnosis-chains-canonical-bridges/8245\n\ + \n### Category\nFunding\n\n### Executive Summary:\nThis proposal presents a detailed\ + \ plan for allocating funds towards integrating the Hashi protocol into Gnosis Chain’s\ + \ canonical bridges from Ethereum, namely the xDAI Bridge and the AMB (on which\ + \ the OmniBridge is built). The initiative emphasizes significantly enhancing the\ + \ security and decentralization of these bridges. The integration aims to introduce\ + \ advanced security measures, mitigate systemic risks, and ensure the Gnosis Chain\ + \ ecosystem remains resilient against the evolving landscape of security threats.\ + \ By fortifying the infrastructure with Hashi, we seek to establish a new standard\ + \ for security and reliability in cross-chain transactions.\nHashi is an additive\ + \ security framework, currently supporting 15+ General Message Passing bridges and\ + \ ZK light clients. With its integration on Gnosis bridges we remove any reliance\ + \ on one specific bridging mechanism and add the ability to define threshold based\ + \ bridging (only when 2 of 3 bridges agree a bridge transaction is accepted) along\ + \ with zero vendor lock-in capabilities by allowing easy replacement of any bridging\ + \ mechanisms in the future.\n\nThis integration will make Gnosis Chain the only\ + \ L1 with such strong bridge security guarantees. We anticipate that this effort\ + \ will foster greater user confidence and will have a big positive impact on the\ + \ Gnosis ecosystem.\n\n### Specification\nThe proposal outlines a multi-faceted\ + \ approach, focusing on:\n\n* Developing an Integration Plan and Reference implementation\n\ + Tailoring Hashi’s protocol to enhance the security properties of the canonical bridges.\ + \ This requires the writing of dedicated technical documents, specifications and\ + \ the development of a reference implementation.\n\n* Conducting Extensive Security\ + \ Audits\nPartnering with leading blockchain security firms to conduct end-to-end\ + \ audits, identifying and addressing potential vulnerabilities within the proposed\ + \ integration framework.\n\n* Executing the Migration\nUpgrading the existing canonical\ + \ bridges with the new proposed integration framework. This will be done in strict\ + \ cooperation with the existing team in charge of Gnosis Chain Bridges.\n\n* Governance\ + \ configuration\nThe current Gnosis Bridges multisig (8 of 15) will be configured\ + \ to set the thresholds and allowed oracles. In the future this governance can be\ + \ also replaced and improved if needed.\n\n### Rationale\nIn an era where security\ + \ breaches and exploits have become increasingly sophisticated, bolstering the security\ + \ and decentralization of Gnosis Chain’s bridges is imperative. Currently, both\ + \ bridges are secured by a decentralized but still permissioned and trusted set\ + \ of validators. Although battle tested throughout the years, the Gnosis community\ + \ and GnosisDAO have realized the need to move to a more trust minimized and future-proof\ + \ setup.\n\nThis proposal is driven by the vision of creating a fortified, resilient\ + \ infrastructure capable of withstanding current and future security challenges.\ + \ The Gnosis Community has already shown in the past a strong commitment to these\ + \ values by supporting similar efforts (i.e. __[GIP-57](https://forum.gnosis.io/t/gip-57-should-gnosis-dao-support-research-of-a-zksnark-enabled-light-client-and-bridge/5421)__\ + \ and the __[addition of Succinct’s ZK Light Client as a Validator](https://blog.succinct.xyz/omnibridge/)__,\ + \ among others) and by bringing to life the Hashi project itself.\nThis integration\ + \ represents a strategic step forward in safeguarding assets and data, ensuring\ + \ the Gnosis Chain remains a secure, trusted, and highly attractive platform for\ + \ users and developers alike.\n\nLastly, Gnosis DAO has demonstrated in the past\ + \ how important bridge security is to them. This proposal aims to implement previous\ + \ research results and reap tangible benefits.\n\n### Budget\nThe budget is meticulously\ + \ structured to cover all critical aspects of the integration process:\n\n* Hashi\ + \ Integration Design and Development: $60,000 allocated towards developing and implementing\ + \ the Hashi integration.\n\n* Security Audits and Migration Strategies: $90,000\ + \ dedicated to coordinating rigorous security audits and the formulation of robust\ + \ mitigation strategies. \n\n* Preparation and Execution of the Migration: $80,000\ + \ allocated to an in-depth study of the recommended configuration options and execution\ + \ of the migration plan with the assistance of GnosisDAO.\n\n* Monitoring the guarded\ + \ launch and safeguards lifting: $20,000 dedicated to monitoring the initial launch\ + \ with safeguards in place and securely lifting them after the initial guarded phase.\n\ + \n#### Milestones:\n\n* Milestone 1: Hashi Integration Design and Implementation\ + \ (Duration: 2 months)\n\n * Deliverables:\n\n * Development of a detailed security-centric\ + \ design document and spec for Hashi’s integration with the 2 canonical bridges\ + \ of \nGnosis Chain.\n * Implementation of a reference code following the specifications.\n\ + \ * Funding Allocation: $60,000\n\n* Milestone 2: Security Audits and Migration\ + \ Plan (Duration: 2 months)\n\n * Deliverables:\n\n * Completion of external\ + \ security audits with documented findings and implemented fixes.\n * Development\ + \ and launch of a Hashi explorer, a tool to oversee the validation progress of cross-chain\ + \ transactions on Gnosis bridges.\n * Coordination on a possible Migration Plan\ + \ as needed by Milestone 3.\n * Funding Allocation: $90,000\n\n* Milestone 3: Preparation\ + \ and Execution of the Migration of the Existing Bridges to the New Solution (Duration:\ + \ 2 months)\n\n * Deliverables:\n\n * Case Study to present the recommended\ + \ configuration options for Hashi.\n * Final coordination with the Gnosis Chain\ + \ team on the Migration Plan execution.\n * Integration and coordination with\ + \ all available oracle teams (the ones available on the Ethereum > Gnosis chain\ + \ route from the total 17) and setup ZK light clients.\n * Execution of the migration\ + \ on the Chiado testnet.\n * Analysis of testnet outcomes.\n * Execution of\ + \ the migration for the Gnosis Chain’s canonical bridges.\n * Comprehensive report\ + \ detailing the integration’s impact on security and decentralization metrics, including\ + \ community feedback and usage statistics.\n * Funding Allocation: $80,000\n\n\ + * Milestone 4: Monitoring the guarded launch and safeguards lifting.\n\n * Deliverables:\n\ + \n * Hashi as a validator on both Gnosis chain canonical bridges.\n * Monitoring\ + \ of Hashi’s consistency with the current validator set.\n * Hashi as a mandatory\ + \ validator.\n * Funding Allocation: $20,000\n\n* Continued maintenance: Close\ + \ to the end of the implementation of this proposal, a new proposal will be drafted\ + \ covering the ongoing maintenance costs (Engineering, DevOps, and ZK Provers),\ + \ expected to total $100,000-$150,000 per year. ZK prover costs cover the infrastructure\ + \ costs (not gas), which currently are expected to decrease over time with the optimization\ + \ work currently in progress by most ZK teams. Currently running just one Prover\ + \ costs $60,000 / year.\n\nThe above pricing incorporates a significant discount\ + \ due to the long and supportive relationship between Hashi and GnosisDAO.\n\n###\ + \ Evaluation\nSuccess will be evaluated based on the seamless integration of Hashi\ + \ and the absence of significant downtimes during the coordinated migration process.\ + \ Additionally, positive feedback from the Gnosis Chain community will serve as\ + \ an indicator of the integration’s success and its impact on enhancing the ecosystem’s\ + \ security posture.\n\n### Team\nThe Cross-chain Interoperability Alliance, the\ + \ core development team of Hashi, comprises 3 people including 1 project manager\ + \ and 2 blockchain engineers/security experts with a proven track record in developing\ + \ cross-chain solutions and in pioneering stronger security guarantees in the space.\ + \ The 3 team members have 4, 8 and 12 years of blockchain working experience respectively.\ + \ This experience is critical in ensuring the successful execution of this proposal.\n\ + \n### Conclusion\nThrough this proposal, we aim to significantly elevate the security\ + \ and decentralization standards of the Gnosis Chain’s canonical bridges. The strategic\ + \ integration of Hashi not only mitigates systemic risks but also positions Gnosis\ + \ Chain as a leader in secure, decentralized cross-chain communications, all this\ + \ while capitalizing on previous GnosisDAO’s investments." +start: 1711447938 +end: 1712052738 +state: closed +author: '0xA02060F08379A756C044608c0a2fcb9C1D2d21dD' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 84975.52303831984 +scores: + - 84970.59014122224 + - 2.4964848240434914 + - 2.4364122735576905 +votes: 280 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-94.yml b/public/GIPs/GIP-94.yml new file mode 100644 index 00000000..2a2b33af --- /dev/null +++ b/public/GIPs/GIP-94.yml @@ -0,0 +1,191 @@ +id: '0xa89b17e380e7c4f177366988fe456a515ec47e00f1e795f33f6178f82aa36bd3' +gip_number: '94' +url: https://snapshot.org/#/gnosis.eth/proposal/0xa89b17e380e7c4f177366988fe456a515ec47e00f1e795f33f6178f82aa36bd3 +title: Should the GnosisDAO approve the “Gnosis Assets Holding I Foundation” for onboarding + into Centrifuge Prime? +body: 'oted on, provide an overview of the foundation structure, and share next steps. + + + This Proposal is an Update to GIP-91 + + Centrifuge is pleased to announce the successful snapshot vote on GIP-91 which brings + GnosisDAO a large step closer in its ability to diversify the treasury into real-word + assets (RWAs). Centrifuge received an overwhelming 96.99% of the governance vote + in the snapshot that closed on January 29th. The proposal targeted initial allocations + of $10m USD into Centrifuge Prime, through pools such as Anemoy LTF, New Silver, + and other available pools. + + + Since then, the Centrifuge team has been progressing with the operational and legal + next steps to ensure a smooth onboarding process. The legal docs, both the MoA and + AoA (attached to this post) define the critical processes and structure of a Cayman + Foundation Company, which will serve as the RWA Legal Conduit we describe in GIP-91. + A summary of such processes and structural matters are set out in this post below, + but please refer to the legal docs for more detailed information. + + + Legal documents are linked right below and at the bottom of this post: + + + The Memorandum of Association Here + + + The Articles of Association Here + + + We are sharing the summary here for the rest of the community with a view to a final + proposal being voted on for implementation. + + + Bringing Anemoy Liquid Treasury Fund to GnosisDAO + + Centrifuge is pleased to bring U.S t-bill access to the GnosisDAO treasury via the + Anemoy Liquid Treasury Fund. This will provide the DAO access to stable yield uncorrelated + to that of DeFi, and importantly, not denominated in volatile assets like Eth/stEth + as the treasury mainly utilizes today to earn yield. + + + Some benefits of the fund structure include: + + + ‍Daily Liquidity: The fund offers daily redemptions in USDC. + + Direct Ownership: The token serves as evidence of ownership, allowing cost-efficient + redemptions and providing legal claims on assets. + + Investor Protection: Prospective investors must adhere to the Know Your Customer + (KYC) and anti-money laundering requirements of a BVI-regulated fund, ensuring a + secure and transparent investment environment. + + Transparency: Centrifuge provides near real-time onchain visibility of holdings, + returns, and tokenized U.S. Treasury Bills. + + + 985×378 19.2 KB + + The Anemoy Liquid Treasury Fund purchases US Treasury bills at different periods + with varying durations, ensuring a revolving set of maturities. The Fund’s investments + are T-Bills with 1 month, 3 month and 6 month maturities. + + + Legal Overview + + The legal structure will be integrated with Karpatkey, who was mandated by governance + to make treasury investment decisions on behalf of the DAO. The principle idea behind + the structure is to establish an entity that is capable of signing and fulfilling + legal agreements for the benefit of GnosisDAO, ultimately enabling GnosisDAO’s path + to legal recourse. This provides a high degree of reliability and security for RWA + investments, without compromising the principles and position of the DAO. This framework + is based on our extensive experience in MakerDAO setting up similar structures. + There, the same structure supports a >$1B in deployed capital. + + + + 1184×690 244 KB + + The structure is enabled by the Cayman Islands Foundation Companies act 2017 (the + Foundation Act). Under this framework, Centrifuge as part of its services, will + set up a foundation company titled the “Gnosis Assets Holding I Foundation.” + + + The Articles of Association defines the critical processes and structure of the + company such as: + + + The company is assigned one nominee director who is responsible for executing and + adhering to the mandate of a DAO Resolution or a Delegated Committee Instruction + + The company may form a Delegated Committee that has a mandate from the DAO to manage + its treasury + + A Delegated Committee Instruction is a written set of instructions as scheduled + to the Articles of Association and from there established as a legal obligation + of the Foundation company. + + A supervisor, responsible for ensuring directors fulfill their duties, and a secretary, + responsible for administering the company, are also required roles + + Specific obligations and procedures for assigning beneficiaries and distributing + assets during events such as winding up the company or similar + + A foundation director will be recommended by Centrifuge solely for the purpose to + execute orders from the DAO, and acts as a legal signature in the Cayman Islands. + The foundation director will implement DAO votes and Delegated Committee Instructions + as detailed in the Articles. The DAO has full authority to remove/replace the foundation + director at full discretion in a timely manner. As part of Centrifuge’s service + offering, the legal conduit/foundation can be repurposed for any of GnosisDAO’s + future needs, including for other RWA projects and issuers. Under the current proposal, + the target max allocation is $10M to be focused mainly in U.S t-bills, but also + diversified in other credit strategies Centrifuge offers if desired. + + + The Initial foundation company secretary shall be Leeward Management Limited + + + Leeward Management Limited is a leading fiduciary and governance services provider + in the Cayman Islands. The service company is well positioned to fulfill work on + behalf of a DAO as it is specialized in dealing with Digital Assets, specifically + RWA structured products. + + + “With the rapid institutionalization of digital assets, having independent, non-executive + directors who provide investors and stakeholders with an added layer of transparency, + accountability and expertise is often a critical element to ensuring a project’s + success.” + + + Glenn Kennedy will be appointed foundation director as approved by both Centrifuge + and GnosisDAO. + + + Due to our relationship with Leeward in using them in several other similar projects, + Centrifuge is able to provide a cost effective deal. Ongoing per annum governance + and corporate expenses of USD 40k consist of fees for the independent foundation + director and foundation supervisor. + + + Next Steps in order: + + Leave posted legal docs to the community forum(in this post) for seven days as a + period for feedback + + Open a snapshot vote to ratify the docs + + Setting up the foundation takes ~10 days + + Begin the KYC process between the foundation director and Anemoy that will take + a week or less + + Investments can then take place immediately + + *Once the DAO has voted and reached the necessary quorum, the Foundation can be + set-up immediately. + + + The Memorandum of Association is a document that contains all the conditions which + are required for the registration of the company. Articles: https://drive.google.com/file/d/1TQwIUj8_04jL3WdCeb_xJDePfyl2U4ws/view?usp=drive_link + + + The Articles of Association is a document that contains the rules and regulations + for the administration of the company. Articles: https://drive.google.com/file/d/1zTJkbPVZQxRbDIrh1vlIKrZiCUao4egk/view?usp=sharing' +start: 1712162198 +end: 1712766998 +state: closed +author: '0xa9D7713e49d2931f12019D3179ccCf7F60F02BC7' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 76164.92001878929 +scores: + - 75037.10943761255 + - 1124.739432993341 + - 3.071148183380795 +votes: 180 +quorum: 75000 +funding: + amount: 10m + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-95.yml b/public/GIPs/GIP-95.yml new file mode 100644 index 00000000..a1e3575e --- /dev/null +++ b/public/GIPs/GIP-95.yml @@ -0,0 +1,34 @@ +id: '0x9297cc7f6a1c8d973199bb215c071cc93c99003b6231b3953edeb1e1a2f2f408' +gip_number: '95' +url: https://snapshot.org/#/gnosis.eth/proposal/0x9297cc7f6a1c8d973199bb215c071cc93c99003b6231b3953edeb1e1a2f2f408 +title: karpatkey DAO Service Extension +body: 'After the approval of GIP-20 4 and GIP-58 5, at karpatkey DAO we have been + working steadily on the management of GnosisDAO’s treasury. Similar to other treasuries + we manage, we have seen the interest of DAOs to diversify their treasuries by adding + exposure to real world assets (“RWA”) as well as interacting with real world entities + for services in the interest of GnosisDAO. + + + We therefore propose that the scope of the treasury management services as carried + out presently, be expanded to cater for the possibility to invest in RWA.' +start: 1712163822 +end: 1712768622 +state: closed +author: '0x14D92832265eeAFDEF9e526356FEfc90105966c3' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 76197.07437188186 +scores: + - 76189.57583076625 + - 4.30528992206668 + - 3.193251193528392 +votes: 180 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-96.yml b/public/GIPs/GIP-96.yml new file mode 100644 index 00000000..cc10c9db --- /dev/null +++ b/public/GIPs/GIP-96.yml @@ -0,0 +1,40 @@ +id: '0x2633e7279cc1522fb233d0e9f5a361b7af97dab2a1a27cb2bbb5d169a224dda1' +gip_number: '96' +url: https://snapshot.org/#/gnosis.eth/proposal/0x2633e7279cc1522fb233d0e9f5a361b7af97dab2a1a27cb2bbb5d169a224dda1 +title: Should the GnosisDAO allow the legal conduit being set up to onboard Centrifuge + Prime, to also hold other investments, including those made by the Gnosis Builders + prior to their dissolution? +body: 'With the Dissolution of the Gnosis Builders, the bulk of the funds as approved + under GIP-38, and not yet spent, have been returned to the DAO. Some investments + are, however, currently illiquid as they were invested by the Gnosis Builders in + early stage projects. Such investments inherently carry a lesser degree of liquidity, + and may contain conditions relating to vesting, lock-ups, future delivery obligations + (e.g. upon the occurrence of a token generation or other trigger event) etc… + + + This proposal intends to seek a vote from the GnosisDAO to enable the legal conduit, + Gnosis Asset Holdings I Foundation (the “Foundation”), which is being set up to + onboard Centrifuge Prime as described in the update to GIP-91 posted here as GIP-94 + 3, to also hold other illiquid investments, including those made historically by + the Gnosis Builders.' +start: 1712164191 +end: 1712768991 +state: closed +author: '0x551A5f2e1237E0Aca27b8e1b46de461ec7EC9da0' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 76141.93852367908 +scores: + - 75017.51479787698 + - 1123.2487688880944 + - 1.1749569140072635 +votes: 206 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-97.yml b/public/GIPs/GIP-97.yml new file mode 100644 index 00000000..2f24e47d --- /dev/null +++ b/public/GIPs/GIP-97.yml @@ -0,0 +1,69 @@ +id: '0x242016595b38af98c3297271ab75c530ebc3dd1c1ec6264bf9b4483003be4bce' +gip_number: '97' +url: https://snapshot.org/#/gnosis.eth/proposal/0x242016595b38af98c3297271ab75c530ebc3dd1c1ec6264bf9b4483003be4bce +title: GIP-97 - karpatkey SafeDAO <> GnosisDAO Joint Treasury Delegation +body: "## Abstract\n\nWith the SafeDAO having achieved all milestones laid out in\ + \ [SEP #3](https://snapshot.org/#/safe.eth/proposal/0xdcd7f8cb197c7132296d802e538df2a565fbe4f8af400f1afbed06b54a808060)\ + \ and approaching its token transferability, we propose to delegate treasury management\ + \ of the joint SafeDAO <> GnosisDAO treasury to karpatkey. \n\nThis proposal is\ + \ being passed in duplicate through Safe governance: https://forum.safe.global/t/draft-karpatkey-safe-dao-treasury-management-core-unit/4893?u=karpatkey.\ + \ With the passing of this proposal, GIP-97, GnosisDAO shall vote favourably on\ + \ the corresponding SafeDAO proposal.\n\n\n\n## Motivation\n\nHaving accomplished\ + \ the objectives outlined in [SEP #3](https://snapshot.org/#/safe.eth/proposal/0xdcd7f8cb197c7132296d802e538df2a565fbe4f8af400f1afbed06b54a808060),\ + \ including the creation of a constitution, a governance framework, a system for\ + \ resource distribution, and the definition of token utility, SafeDAO has completed\ + \ all the necessary steps for its token transferability.\n\nWith the foundational\ + \ elements of SafeDAO in place, the focus naturally shifts to the efficient and\ + \ strategic management of the DAO's assets. Alongside the token transferability,\ + \ the unlocking of the [joint treasury](https://etherscan.io/address/0xd28b432f06cb64692379758b88b5fcdfc4f56922)\ + \ between GnosisDAO and SafeDAO will take place. We propose delegating the joint\ + \ treasury management to karpatkey as part of the mandate.\n\n## Specificaiton\n\ + \nAccording to [GIP-29](https://forum.gnosis.io/t/gip-29-spin-off-safedao-and-launch-safe-token/3476),\ + \ 5% of the SAFE tokens are allocated to a shared treasury by SafeDAO and GnosisDAO\ + \ intended to fund rewards beneficial to both the Safe and Gnosis communities.\n\ + \nWe propose that GnosisDAO entrust the management of this collective treasury to\ + \ karpatkey as an extension of [GIP-58](https://snapshot.org/#/gnosis.eth/proposal/0x867149a44d4f2324520f9f0f8a0d91988b26e4ba4d8662635b29ca733a1354b8).\ + \ With karpatkey's deep involvement in both projects it is positioned optimally\ + \ to manage the joint treasury efficiently and align the interests of both communities.\n\ + \nThe joint treasury will be used to create liquid Safe markets with up to 2.5M\ + \ $SAFE used for incentivising $SAFE DEX liquidity on the Gnosis Chain.\n\nAdditionally,\ + \ the joint treasury will be used to provide liquidity for Safe on Ethereum and\ + \ Gnosis Chain as well as support the Safe price. Upon potential diversification\ + \ of the treasury in the future, karpatkey shall also use these assets for staking\ + \ (ETH / GNO), LPing or other means to gather yield on the assets. Given the initial\ + \ 100% treasury composition of native tokens (SAFE), karpatkey will provide a more\ + \ detailed strategy as these become feasible.\n\nThe joint treasury will be included\ + \ on our [reports page](https://reports.karpatkey.com/), allowing the community\ + \ to monitor positions and actions taken with the treasury holdings.\n\n### Implementation\n\ + \nTo implement active treasury management and make the delegation effective the\ + \ current signers, Safe Foundation and Gnosis DAO, will amend the existing joint\ + \ treasury safe to a 3/6 MS with 2 karpatkey signers, 4 signers to be appointed\ + \ by the current signers, and a Module Safe controlled by SafeDAO and GnosisDAO\ + \ which itself will always have full control over the joint treasury. \n\nA corresponding\ + \ Safe will also be deployed on Gnosis to expand the joint treasury's presence to\ + \ the chain.\n\n### Fees\n\n2% annual fee on assets under management, paid in monthly\ + \ instalments in either ETH, stablecoins or Safe token at the discretion of karpatkey\ + \ and what is feasible based on the treasury composition.\n\nFees are calculated\ + \ as `jointTreasury * 0.02 / 12` at 23:59 UTC on the last day of each month and\ + \ will be paid from the joint treasury." +start: 1712433300 +end: 1713038100 +state: closed +author: '0x8787FC2De4De95c53e5E3a4e5459247D9773ea52' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 75988.38713778465 +scores: + - 75980.34006851442 + - 5.036181883591896 + - 3.010887386638278 +votes: 216 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-98.yml b/public/GIPs/GIP-98.yml new file mode 100644 index 00000000..84dec6d3 --- /dev/null +++ b/public/GIPs/GIP-98.yml @@ -0,0 +1,54 @@ +id: '0x185609896381d3e5e77bcf025b1618e8d107e862c0de34a942408964cca56527' +gip_number: '98' +url: https://snapshot.org/#/gnosis.eth/proposal/0x185609896381d3e5e77bcf025b1618e8d107e862c0de34a942408964cca56527 +title: Should GnosisDAO invest in HOPR to kickstart development of GnosisVPN? +body: 'Abstract + + To strengthen Gnosis’ positioning as a leader in resilient web3 infrastructure, + GnosisDAO would invest into HOPR to foster Gnosis’ focus on privacy. HOPR would + then build Gnosis VPN, a truly private and decentralized VPN on top of the HOPR + mixnet. To increase Gnosis DAO’s oversight, this effort will be split into two: + this proposal and a follow up proposal for further development after initial work + has been presented within 9 months. + + + Within the framework of this first proposal, HOPR would build a set of VPN (virtual + private network) libraries for privately relaying HTTP calls and responses and a + proof of concept Gnosis VPN browser extension. Working over the HOPR mixnet, this + first extension will give users fully metadata-private access to a set of predefined + Gnosis Dapps from their web browsers. In particular, this will allow users to interact + with a full suite of crypto services without revealing their IP address or geolocation + to the respective web servers. + + + These libraries and proof of concept browser extension would be supported with an + investment of $1.5m to form the basis for GnosisVPN, a fully decentralized VPN service + tailored to web3 users. The scaling and UX work needed to bridge these two versions + would be the subject of a future proposal, contingent on the successful completion + of the deliverables in this proposal. + + + In addition to the product development, GnosisDAO will receive HOPR tokens at a + 30% discount on the 90-day $HOPR TWAP, ending on the day the proposal passes for + their $1.5m investment.' +start: 1713271811 +end: 1713876611 +state: closed +author: '0x14D92832265eeAFDEF9e526356FEfc90105966c3' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 76674.06091568555 +scores: + - 76628.84115966388 + - 43.00987849905545 + - 2.209877522599347 +votes: 169 +quorum: 75000 +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-99.yml b/public/GIPs/GIP-99.yml new file mode 100644 index 00000000..d7041b85 --- /dev/null +++ b/public/GIPs/GIP-99.yml @@ -0,0 +1,171 @@ +id: gip-99-should-gnosis-guild-steward-gnosisdao-governance +gip_number: 99 +url: https://forum.gnosis.io/t/gip-99-should-gnosis-guild-steward-gnosisdao-governance +title: Should Gnosis Guild steward GnosisDAO Governance? +body: "## Category\n\nService Agreements\n\n## Executive Summary\n\nGnosis Guild proposes\ + \ to steward GnosisDAO governance, guiding a new phase of innovation, experimentation,\ + \ and growth. As GnosisDAO continues allocating resources to Gnosis Chain, Gnosis\ + \ Pay, and other mission-aligned ventures, our team will drive the DAO’s governance\ + \ strategy and operations through dedicated R&D, technical implementation, and ongoing\ + \ stewardship.\n\nWhile Gnosis Guild has been actively contributing to the maintenance\ + \ and improvement of GnosisDAO governance since its inception, this proposal will\ + \ formalize a long-term partnership that prioritizes the following objectives:\n\ + \n * Improve, maintain, and secure GnosisDAO governance infrastructure.\n * Foster\ + \ the growth and further decentralization of the Gnosis Ecosystem.\n * Position\ + \ GnosisDAO as leading innovators of DAO governance.\n\n\n\nThrough these guiding\ + \ stars, Gnosis Guild will also address the challenges currently faced by GnosisDAO’s\ + \ governance. Initiatives includes: (1) designing a new governance architecture\ + \ and roadmap to tackle the operational inefficiency of its monolithic governance\ + \ patterns, (2) introducing novel funding mechanisms to address its inefficient\ + \ capital allocation and lackluster ecosystem development, and (3) progressively\ + \ decentralizing DAO processes to increase governance activity, transparency, and\ + \ participation.\n\nOur annual funding request is 0.3% of AUM, 50% in USDC and 50%\ + \ in GNO (at the 200-day moving average at the time of allocation and locked for\ + \ one year), paid monthly to Gnosis Guild coinciding with karpatkey’s monthly treasury\ + \ report.\n\n**About Gnosis Guild:** _Gnosis Guild is a web3-native venture studio\ + \ with the values of conviviality, co-ownership, and experimentation at its heart.\ + \ For over three years, our team’s modular tooling and needs-driven development\ + \ have secured and operationalized the GnosisDAO’s governance and treasury asset\ + \ management. These include: Zodiac Reality Module for decentralized Snapshot governance;\ + \ Zodiac Roles and bespoke tooling for karpatkey’s non-custodial asset management;\ + \ custom strategies for delegation; token locking and distribution systems for CoW\ + \ and Safe; and support and development for other GnosisDAO initiatives like Hashi\ + \ and Gnosis Pay._\n\n## Service Description\n\nGnosis Guild will guide GnosisDAO’s\ + \ governance through strategic R&D, technical implementation, and ongoing stewardship.\ + \ In response to community feedback and motivated by our commitment to needs-driven\ + \ development for the GnosisDAO, we have outlined objectives that will inform our\ + \ overarching governance strategy and initiatives that address key areas for improvement.\n\ + \n### Objectives:\n\n 1. **Improve, maintain, and secure GnosisDAO governance infrastructure.**\ + \ \n**Indicator:** Increased utility and adoption of GNO as a governance token\ + \ through enhanced voting participation and token utilization.\n\n 2. **Foster\ + \ the growth and further decentralization of the Gnosis Ecosystem.** \n**Indicator:**\ + \ A thriving ecosystem with multiple transparent funding mechanisms and active engagement\ + \ from top-tier external contributors.\n\n 3. **Position GnosisDAO as leading innovators\ + \ of DAO governance.** \n**Indicator:** Novel governance infrastructure and ongoing\ + \ initiatives to integrate emerging tech.\n\n\n\n\n### Key Performance Indicators:\n\ + \n 1. Improvement in annual total vote weight utilized\n 2. Improvement in annual\ + \ total voter turnout\n 3. Increased allocation of annual total resources per approved\ + \ proposals\n\n\n\nWe will use the consistent evaluation of these variables on an\ + \ ongoing basis to measure our impact on our outlined objectives. By measuring vote\ + \ weight utilization, voter turnout, and resource allocation, we can explicitly\ + \ measure governance engagement and implicitly measure proposal quality. While resource\ + \ allocation is inconsistently documented across proposals to date, we estimate\ + \ that an increase in the ratio of total proposed funds to allocated funds would\ + \ correlate with an increase in proposal approvals and quality. We will evaluate\ + \ each proposal individually, but due to the historically significant variation\ + \ in engagement between proposals, our KPIs will be measured on a yearly time period\ + \ to reflect macro trends. For example: from 2022 to 2023, there was a 73% decrease\ + \ in proposals generated, a 66% decrease in total voters, and a 79% decrease in\ + \ total vote weight utilized. While the causes of changes in governance engagement\ + \ are speculative, our intuition is that market dynamics, major events (xDai merger),\ + \ and governance stewardship were contributing factors.\n\n### Initiatives:\n\n\ + A new architecture and roadmap for governance\n\n * Problem: GnosisDAO’s monolithic\ + \ governance pattern limits operational efficiency and innovative potential.\n \ + \ * Solution: Develop a new architecture and roadmap to enhance agility and innovation,\ + \ focused on multiple types of roles, organizational units, and parallel governance\ + \ processes.\n\n\n\nNovel funding mechanisms to foster the Gnosis Ecosystem\n\n\ + \ * Problem: Opaque ecosystem funding mechanisms hinder capital allocation and\ + \ ecosystem development.\n * Solution: Implement novel funding mechanisms to scale\ + \ and grow the Gnosis Ecosystem, fostering transparency and capital efficiency.\n\ + \n\n\nProgressive decentralization of DAO processes\n\n * Problem: Low governance\ + \ participation reflects a perceived lack of value in committing resources.\n *\ + \ Solution: Facilitate progressive decentralization of DAO processes for greater\ + \ resilience and trustlessness, creating a more automated, efficient, and permissionless\ + \ functioning for the DAO.\n\n\n\n### 1\\. Key aspects\n\n**A new architecture and\ + \ roadmap for governance**\n\nThe current governance process only allows one path\ + \ for DAO action, namely GIPs. This monolithic structure can be very time consuming\ + \ and involve significant risk on both the contributor and DAO sides, along with\ + \ implying high voter bandwidth. Creating multiple types of roles, organizational\ + \ units, and parallel governance processes within the DAO will serve to decentralize\ + \ decision-making, reduce bottlenecks, improve bandwidth, and diversify the DAO’s\ + \ ability to adapt and respond. Safe Guardians, OP Badge Holders, and ENS working\ + \ groups are a few examples. By effectively delegating clearly scoped responsibilities\ + \ to autonomous groups, GnosisDAO can improve its organizational efficiency while\ + \ reducing the governance overhead of its top layer governance. We will develop\ + \ an evolving architecture, with ongoing innovation and experimentation, to remain\ + \ agile to dynamic needs.\n\n**Novel funding mechanisms to foster the Gnosis Ecosystem**\n\ + \nTo scale and grow the Gnosis Ecosystem, we will design and implement novel funding\ + \ mechanisms for maximum capital efficiency. Multiple paths to ecosystem funding\ + \ would enable more autonomous contributions, with clear directives and expectations.\ + \ Optimism and Arbitrum have set an excellent example here, and their ecosystem\ + \ growth is a clear reflection. Frameworks like RetroPGF, ARB’s STIP + multiple\ + \ grants programs, and Safe’s OBRA are all promising directions. Based on their\ + \ successes and pitfalls, we will develop our own mechanism suited to the Gnosis\ + \ Ecosystem.\n\n**Progressive decentralization of DAO processes**\n\nBy developing\ + \ modular, composable DAO governance processes, we will increase decentralization\ + \ and transparency. In reducing any single point of failure, the DAO will have greater\ + \ resilience and trustlessness. With the development of new onchain mechanisms,\ + \ we will create a more automated, efficient, and permissionless functioning for\ + \ the DAO.\n\n### 2\\. Service Scope\n\nThis proposal is solely for our work stewarding\ + \ governance of GnosisDAO. Any additional work, such as our contributions to Gnosis\ + \ Pay, Hashi, and DAO treasury management, would be out of scope.\n\n### 3\\. Service\ + \ delivery\n\n**Immediate Improvements**\n\n * Modernize the GnosisDAO’s Snapshot\ + \ strategy to correctly account for a greater diversity of GNO holders.\n * Enable\ + \ key delegation features for the DAO: split delegation, transitive delegation,\ + \ and delegation term limits.\n * Implement spam proposal filtration\n\n\n\n**Research,\ + \ Architecture, Design**\n\n * Extensive research of successful DAO governance\ + \ architectures\n * Continuous gathering of GNO stakeholder feedback\n * Iterative\ + \ design of novel mechanisms for the DAO’s operations\n * Experimentation with\ + \ parallel, tightly-scoped governance mechanisms\n * Development of a collaborative\ + \ roadmap for the DAO’s evolution\n\n\n\n**Technical Implementation**\n\n * Full-stack\ + \ and smart contract development of governance tooling\n * Implement novel governance\ + \ technologies\n\n\n\n**Continuous Stewardship and Operations**\n\n * Management\ + \ of DAO governance processes\n * Coordination of calls, feedback, and calendar\n\ + \ * Active engagement in forum to foster transparent, efficient dialogue\n * Rapid\ + \ response to emergent issues and risks\n\n\n\n### 4\\. Support\n\nGnosis Guild\ + \ will provide community technical support and ensure we have a rapid response process\ + \ to any high-risk issues related to GnosisDAO governance.\n\n## Pricing and payment\n\ + \nGnosis Guild requests an annual compensation of 0.3% AUM, paid pro rata on a monthly\ + \ cadence, coinciding with, and calculated according to, the AUM reported in karpatkey’s\ + \ treasury report for the month. The compensation should be 50% USDC and 50% GNO,\ + \ with the GNO subject to 1 year locking from the time it is distributed.\n\nPayment\ + \ Frequency | USDC Allocation | GNO Allocation \n---|---|--- \nMonthly | (AUM\ + \ * 0.003 * 0.5) / 12 | (AUM * 0.003 * 0.5) / 12 \n \n(using the 200-day moving\ + \ average price for GNO at the date of allocation)|\n\nGnosis Guild initially anticipates\ + \ 3-6 individuals working on the identified scope at any given time, with the possibility\ + \ to scale alongside treasury growth. The total cost to GnosisDAO will remain [competitive\ + \ with other top protocol DAOs](https://tokenterminal.com/resources/crypto-research/how-much-does-it-really-cost-to-run-a-dao#4-smart-contract-cyber-security-expenditure).\n\ + \n## Service Terms and Exit Strategy\n\nIf applicable the duration of the service\ + \ agreement. Please outline the terms and conditions for exiting the service agreement,\ + \ including the circumstances under which a party may terminate the agreement, and\ + \ any other important details.\n\nThe agreement between service provider Gnosis\ + \ Guild and organization GnosisDAO will take effect immediately upon this proposal\ + \ passing. The terms within the agreement will be valid in perpetuity, unless terminated\ + \ by either party or updated with mutual consent by both parties. GnosisDAO will\ + \ assign specific permissions to Gnosis Guild within their treasury utilizing the\ + \ Roles Modifier to enable Gnosis Guild to autonomously collect payment. Either\ + \ party may terminate the agreement at any time without cause by giving 90 days\ + \ of written notice to the other party. Upon termination, all outstanding payments\ + \ shall be made by GnosisDAO to Gnosis Guild prior to agreement on termination date.\n\ + \n## Team/ Organization\n\n[Gnosis Guild](https://www.gnosisguild.org/) will act\ + \ as an Autonomous Core Contributor for GnosisDAO. Through mutualistic partnerships\ + \ and activist R&D, our team of engineers, designers, and researchers will foster\ + \ the long-term development and sustainable growth of GnosisDAO’s network. See our\ + \ contributor list [here](https://www.notion.so/gnosisguild/ea611cd34400412cabb4121d90aaa94f?v=912defbb43d1452f9c8b66182183376f&pvs=4).\n\ + \n## Conclusion\n\nHere you can summarize your project or include anything that\ + \ wasn’t mentioned yet and is important to understand the GIP.\n\n6 Likes\n\n[GIP-101:\ + \ Should karpatkey and StableLab Establish a Delegate Program v0 for the GnosisDAO?](https://forum.gnosis.io/t/gip-draft-establish-gnosisdao-delegate-program-v0/8578/2)\n\ + \n[V2 - Should Gnosis DAO fund the continuation of the validator Monitoring Telegram\ + \ bot?](https://forum.gnosis.io/t/v2-should-gnosis-dao-fund-the-continuation-of-the-validator-monitoring-telegram-bot/8415/9)\n" +start: 1712628182 +end: null +state: + - phase-1 +author: Alex (alex@gnosisguild.org) +choices: + - For + - Against + - Abstain +scores_state: null +scores_total: null +scores: + - 0 + - 0 + - 0 +votes: null +quorum: null +funding: + amount: null + currency: null + confidence: 'High ' + model_used: gemini-1.5-flash diff --git a/public/GIPs/GIP-None-unknown.yml b/public/GIPs/GIP-None-unknown.yml new file mode 100644 index 00000000..1c6efafa --- /dev/null +++ b/public/GIPs/GIP-None-unknown.yml @@ -0,0 +1,64 @@ +id: '0x17e22a4292b52a638fb956447d7ca9a0adbd51d36dc6fc7dd10ae97dff6f878a' +gip_number: null +url: https://snapshot.org/#/gnosis.eth/proposal/0x17e22a4292b52a638fb956447d7ca9a0adbd51d36dc6fc7dd10ae97dff6f878a +title: Should Gnosis DAO conduct a $30 million buyback program? +body: 'We suggest allocating approximately 5% of the Gnosis DAO assets, primarily + SAFE, ETH, and stablecoins, to fund a $30 million buyback program. This proposal + is aimed at bringing the price of GNO above the book value. + + + + **Goals** + + * Transfer value to long-term holders by acquiring GNO below its intrinsic value. + The acquired tokens can be utilized for the growth and other initiatives of the + DAO. + + * Signal to the market a commitment to establishing a valuation floor for GNO that + consistently exceeds its book value. + + * Attract attention to the DAO''s products and community by enhancing the investment + appeal of the GNO token. + + + + **Execution** + + To maximize the efficiency and minimize the risk of frontrunning, we suggest dividing + the $30 million into two equal parts, each allocated to a certain strategy: + + 1) $15 million for CoW-TWAP order, executed at any price below the dynamically-calculated + book value over a six-month period. + + 2) $15 million at the full discretion of Karpatkey, enabling them to capitalize + on the most advantageous opportunities. + + + + While the framework and main details of the program are outlined in the proposal + and elaborated on in the forum discussion, we believe the exact details of the asset + composition, trading venues, and methods of financing buybacks (e.g., converting + altcoins to ETH to be used in the program through market makers, OTC, or onchain), + should be managed by Karpatkey. This delegation aims to minimize value leakage and + ensure optimal execution.' +start: 1717437942 +end: 1718042742 +state: closed +author: '0xFB014896319E1650FD1426A6A4f070e9286f46F1' +choices: + - For + - Against + - Abstain +scores_state: final +scores_total: 106807.52799444586 +scores: + - 87476.73086906294 + - 418.2322635466969 + - 18912.564861836232 +votes: 193 +quorum: 75000 +funding: + amount: 30,000,000 + currency: USD + confidence: 'High ' + model_used: gemini-1.5-flash From 741b02cdf7eba48942ff3c392fe1ebb3bc0b870e Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 08:34:45 +0100 Subject: [PATCH 06/21] fix: remove warning and type errors on GIP items component --- src/components/ENSAuthorDisplay.tsx | 2 +- src/components/GIPItem.tsx | 41 +++++++++-------------------- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/components/ENSAuthorDisplay.tsx b/src/components/ENSAuthorDisplay.tsx index 845f9132..9b7f60c8 100644 --- a/src/components/ENSAuthorDisplay.tsx +++ b/src/components/ENSAuthorDisplay.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; const isEthereumAddress = (address: string) => { return /^0x[a-fA-F0-9]{40}$/.test(address); diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 8669ffc2..83a7f579 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -26,25 +26,6 @@ const GIPItem = ({ gip }: GIPItemProps) => { }); }; - const getBadge_state = (state: string) => { - const stateMap = { - closed: 'black', - open: 'info', - 'phase-1': 'info', - 'phase-2': 'info', - }; - return stateMap[state] || 'primary'; - }; - - const getBadge_status = (status) => { - const statusMap = { - passed: 'success', - failed: 'danger', - pending: 'warning', - }; - return statusMap[status] || 'primary'; - }; - const computeState = ( scores: string | any[], quorum: number, @@ -66,6 +47,8 @@ const GIPItem = ({ gip }: GIPItemProps) => { return 'No funding information available'; }; + const state = computeState(gip.scores, gip.quorum, gip.scores_state); + const renderChart = ( scores: string | any[], scores_total: number, @@ -95,8 +78,14 @@ const GIPItem = ({ gip }: GIPItemProps) => {

{gip.title}

{formatDate(gip.start)}

-

{gip.state}

-

{computeState(gip.scores, gip.quorum, gip.scores_state)}

+

{gip.state}

+

+ {state} +

{open && ( @@ -153,20 +142,14 @@ const GIPItem = ({ gip }: GIPItemProps) => {

State: {gip.state} Status: {computeState( gip.scores, From 596883ac6071c1edab7d7c920843f5a95ef6de43 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 08:51:44 +0100 Subject: [PATCH 07/21] style: improve gip item component --- src/components/GIPItem.tsx | 34 +++++++++++++++------------------- src/components/GIPTable.tsx | 11 ++++++----- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 83a7f579..317d4ac0 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -75,17 +75,19 @@ const GIPItem = ({ gip }: GIPItemProps) => { onClick={() => setOpen(!open)} >

{gip.gip_number}

-

{gip.title}

-

{formatDate(gip.start)}

-
-

{gip.state}

-

- {state} -

+
+

{gip.title}

+

{formatDate(gip.start)}

+
+

{gip.state}

+

+ {state} +

+
{open && ( @@ -141,16 +143,10 @@ const GIPItem = ({ gip }: GIPItemProps) => {

State: - - {gip.state} - + {gip.state} Status: - + {computeState( gip.scores, gip.quorum, diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index 99f7271b..3a4ae5c4 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -1,8 +1,7 @@ import { useState, useMemo } from 'react'; -import { Table, Button, Form } from 'react-bootstrap'; +import { Button, Form } from 'react-bootstrap'; import { Chart, registerables } from 'chart.js'; import 'chart.js/auto'; -import 'bootstrap/dist/css/bootstrap.min.css'; import '../index.css'; import annotationPlugin from 'chartjs-plugin-annotation'; import GIPItem from './GIPItem'; @@ -78,9 +77,11 @@ const GIPTable = ({ gips }: GIPTableProps) => { Status Actions - {visibleGips.map((gip) => ( - - ))} +

+ {visibleGips.map((gip) => ( + + ))} +
{visibleCount < filteredGips.length && (
From cbe95f8837179c8a98386c0dc2b7c4a02a08259d Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 09:50:24 +0100 Subject: [PATCH 08/21] style: improving layout for mobile view --- src/App.tsx | 56 ++++++++++++++++++++----------------- src/components/GIPItem.tsx | 38 ++++++++++++++----------- src/components/GIPTable.tsx | 16 +++++------ 3 files changed, 61 insertions(+), 49 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 11cf3ac2..def7e870 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,25 +6,27 @@ import yaml from 'js-yaml'; import GIPTable from './components/GIPTable'; export interface GIP { - author: string, - body: string, - choices: "For" | "Against" | "Abstain", - end: number, - funding: { - amount: string, - currency: string, - } | undefined, - gip_number: string, - id: string, - quorum: number, - scores: number[], - scores_state: string, - scores_total: number, - start: number, - state: string, + author: string; + body: string; + choices: 'For' | 'Against' | 'Abstain'; + end: number; + funding: + | { + amount: string; + currency: string; + } + | undefined; + gip_number: string; + id: string; + quorum: number; + scores: number[]; + scores_state: string; + scores_total: number; + start: number; + state: string; title: string; - url: string, - votes: number + url: string; + votes: number; } function App() { @@ -51,11 +53,14 @@ function App() { }) ); const fileContents = await Promise.all(fetchPromises); - + const parsedGips = fileContents .filter((content): content is string => { if (!content || content.startsWith('')) { - console.warn('Invalid file content, skipping:', content?.slice(0, 100)); + console.warn( + 'Invalid file content, skipping:', + content?.slice(0, 100) + ); return false; } return true; @@ -69,21 +74,20 @@ function App() { } }) .filter((gip): gip is GIP => gip !== null); - + setGips(parsedGips); console.log('Parsed GIPs:', parsedGips); } catch (error) { console.error('Error loading GIPs:', error); } }; - useEffect(() => { loadGIPs(); }, []); return (
-

Gnosis Governance Dashboard

+

Gnosis Governance Dashboard

@@ -97,8 +101,10 @@ function App() {
Search Component Here
- {} - {/* */} +
+ {} + {/* { */} +
diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 317d4ac0..9ed7f261 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -74,31 +74,39 @@ const GIPItem = ({ gip }: GIPItemProps) => { className='w-full flex flex-col items-center' onClick={() => setOpen(!open)} > -

{gip.gip_number}

-
-

{gip.title}

-

{formatDate(gip.start)}

-
-

{gip.state}

-

- {state} +

+

+ {gip.gip_number} +

+
+

{gip.title}

+

+ {formatDate(gip.start)}

+
+

{gip.state}

+

+ {state} +

+
{open && ( - {/* Title Section */}

GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title}

- {/* Metadata Card */}
@@ -159,7 +167,6 @@ const GIPItem = ({ gip }: GIPItemProps) => { - {/* Chart Section */} {gip.choices && gip.scores && gip.scores.length > 0 && @@ -182,7 +189,6 @@ const GIPItem = ({ gip }: GIPItemProps) => {
)} - {/* Body Content */} {gip.body} diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index 3a4ae5c4..a7c32c23 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -20,7 +20,7 @@ const GIPTable = ({ gips }: GIPTableProps) => { column: 'gip_number', state: 'desc', }); - const [visibleCount, setVisibleCount] = useState(50); + const [visibleCount, setVisibleCount] = useState(20); const filteredGips = useMemo(() => { return gips @@ -49,12 +49,12 @@ const GIPTable = ({ gips }: GIPTableProps) => { }, [filteredGips, visibleCount]); const loadMore = () => { - setVisibleCount((prev) => prev + 50); + setVisibleCount((prev) => prev + 20); }; return (
-
+ {/*
{ placeholder='Search by Title...' onChange={(e) => setSearchTermTitle(e.target.value)} /> -
+
*/}
- + {/* No. Title Started State Status Actions - -
+ */} +
{visibleGips.map((gip) => ( ))}
{visibleCount < filteredGips.length && ( -
+
)} From 1bfc584fa43d3e5b6da7efb733d1864b31ce6650 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 14:09:13 +0100 Subject: [PATCH 09/21] feat: improve gip item open style --- src/components/DynamicChart.tsx | 1 - src/components/ENSAuthorDisplay.tsx | 4 +- src/components/GIPItem.tsx | 139 +++++++++------------------- 3 files changed, 47 insertions(+), 97 deletions(-) diff --git a/src/components/DynamicChart.tsx b/src/components/DynamicChart.tsx index efd10309..03ff0af7 100644 --- a/src/components/DynamicChart.tsx +++ b/src/components/DynamicChart.tsx @@ -156,7 +156,6 @@ const DynamicChart = ({ scores, scores_total, scores_state, quorum }) => { height: '100%', maxWidth: '700px', maxHeight: '400px', - margin: '0 auto', // Center the chart }} >
{ // If it's an Ethereum address, show ENS or truncated address if (isEthereumAddress(author)) { return ensName ? ( - {ensName} + {ensName} ) : ( - {`${author.substring(0, 6)}...${author.substring(38)}`} + {`${author.substring(0, 6)}...${author.substring(38)}`} ); } diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 9ed7f261..6de3e53f 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -79,7 +79,7 @@ const GIPItem = ({ gip }: GIPItemProps) => { {gip.gip_number}

@@ -87,7 +87,7 @@ const GIPItem = ({ gip }: GIPItemProps) => {

{formatDate(gip.start)}

-
+

{gip.state}

{

{open && ( - - - -

- GIP-{parseInt(gip.gip_number, 10) || 0}: {gip.title} -

- - - -
-
-

- No.: - {parseInt(gip.gip_number, 10) || 0} -

-

- Author: {' '} - -

-

- Started: - {formatDate(gip.start)} -

-

- Proposal: - {gip.url ? ( - - link - - ) : ( - 'No link available' - )} -

-
-
-

- - {gip.scores_state !== 'final' ? 'Ending' : 'Ended'}:{' '} - - {formatDate(gip.end)} -

-

- Requested Funding: - {renderFundingInfo(gip)} -

-

- State: - {gip.state} - - Status: - - {computeState( - gip.scores, - gip.quorum, - gip.scores_state - )} - -

-
-
-
-
+
+
+ Author +
+ +
+
+
+ Started +

{formatDate(gip.start)}

+
+
+ {gip.scores_state !== 'final' ? 'Ending' : 'Ended'} +

{formatDate(gip.end)}

+
+
+ Requested Funding +

{renderFundingInfo(gip)}

+
+
+ State +

{gip.state}

+
+
+ Status +

{state}

+
- {gip.choices && - gip.scores && - gip.scores.length > 0 && - gip.scores_total && ( -
-
- {renderChart( - gip.scores, - gip.scores_total, - gip.scores_state, - gip.quorum - )} -
-
+ {gip.choices && + gip.scores && + gip.scores.length > 0 && + gip.scores_total && ( +
+ {renderChart( + gip.scores, + gip.scores_total, + gip.scores_state, + gip.quorum )} +
+ )} - - {gip.body} - - - - + + {gip.body} + +
)}
); From 34510de35540ac0086304feb1cbf4becf064f2f3 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 15:00:36 +0100 Subject: [PATCH 10/21] feat add style for markdown --- src/App.css | 14 ++++++++++++++ src/components/GIPItem.tsx | 20 ++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/App.css b/src/App.css index e69de29b..ead7bda1 100644 --- a/src/App.css +++ b/src/App.css @@ -0,0 +1,14 @@ +h1 { + font-size: 30px; + font-weight: 500; +} + +h2 { + font-size: 24px; + font-weight: 500; +} + +h3 { + font-size: 20px; + font-weight: 500; +} \ No newline at end of file diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 6de3e53f..4285411d 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -102,29 +102,31 @@ const GIPItem = ({ gip }: GIPItemProps) => { {open && (
- Author + Author
- Started + Started

{formatDate(gip.start)}

- {gip.scores_state !== 'final' ? 'Ending' : 'Ended'} + + {gip.scores_state !== 'final' ? 'Ending' : 'Ended'} +

{formatDate(gip.end)}

- Requested Funding + Requested Funding

{renderFundingInfo(gip)}

- State + State

{gip.state}

- Status + Status

{state}

@@ -132,7 +134,7 @@ const GIPItem = ({ gip }: GIPItemProps) => { gip.scores && gip.scores.length > 0 && gip.scores_total && ( -
+
{renderChart( gip.scores, gip.scores_total, @@ -142,9 +144,7 @@ const GIPItem = ({ gip }: GIPItemProps) => {
)} - - {gip.body} - + {gip.body}
)}
From e60ac4df5cbeb0eed7b5a32dee906a9fbdda23ef Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Mon, 18 Nov 2024 16:47:06 +0100 Subject: [PATCH 11/21] feat: add transition --- src/App.css | 16 ++++-- src/components/GIPItem.tsx | 101 ++++++++++++++++++++----------------- 2 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/App.css b/src/App.css index ead7bda1..0f525ab9 100644 --- a/src/App.css +++ b/src/App.css @@ -1,14 +1,24 @@ h1 { font-size: 30px; - font-weight: 500; + font-weight: 700; } h2 { font-size: 24px; - font-weight: 500; + font-weight: 700; } h3 { font-size: 20px; - font-weight: 500; + font-weight: 700; +} + +h4 { + font-size: 18px; + font-weight: 700; +} + +h5 { + font-size: 16px; + font-weight: 700; } \ No newline at end of file diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 4285411d..3fe78157 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -75,13 +75,17 @@ const GIPItem = ({ gip }: GIPItemProps) => { onClick={() => setOpen(!open)} >
-

+

{gip.gip_number}

{gip.title}

@@ -99,54 +103,57 @@ const GIPItem = ({ gip }: GIPItemProps) => {

- {open && ( -
-
- Author -
- -
-
-
- Started -

{formatDate(gip.start)}

-
-
- - {gip.scores_state !== 'final' ? 'Ending' : 'Ended'} - -

{formatDate(gip.end)}

-
-
- Requested Funding -

{renderFundingInfo(gip)}

-
-
- State -

{gip.state}

-
-
- Status -

{state}

+ +
+
+ Author +
+
+
+
+ Started +

{formatDate(gip.start)}

+
+
+ + {gip.scores_state !== 'final' ? 'Ending' : 'Ended'} + +

{formatDate(gip.end)}

+
+
+ Requested Funding +

{renderFundingInfo(gip)}

+
+
+ State +

{gip.state}

+
+
+ Status +

{state}

+
- {gip.choices && - gip.scores && - gip.scores.length > 0 && - gip.scores_total && ( -
- {renderChart( - gip.scores, - gip.scores_total, - gip.scores_state, - gip.quorum - )} -
- )} + {gip.choices && + gip.scores && + gip.scores.length > 0 && + gip.scores_total && ( +
+ {renderChart( + gip.scores, + gip.scores_total, + gip.scores_state, + gip.quorum + )} +
+ )} - {gip.body} -
- )} + {gip.body} +
); }; From 4a2d7b0e4f318f8b3815f7d5dd55d42c3c5c2d62 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Tue, 19 Nov 2024 08:05:18 +0100 Subject: [PATCH 12/21] fix: remove react-bootstrap --- src/App.tsx | 2 +- src/components/GIPTable.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index def7e870..28d0afd2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -88,7 +88,7 @@ function App() { return (

Gnosis Governance Dashboard

-
+
diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index a7c32c23..e571277d 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -1,5 +1,4 @@ import { useState, useMemo } from 'react'; -import { Button, Form } from 'react-bootstrap'; import { Chart, registerables } from 'chart.js'; import 'chart.js/auto'; import '../index.css'; @@ -85,7 +84,7 @@ const GIPTable = ({ gips }: GIPTableProps) => {
{visibleCount < filteredGips.length && (
- +
)}
From b96995c18f540afa9272aea40dabb4aeef1f6697 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Tue, 19 Nov 2024 08:26:58 +0100 Subject: [PATCH 13/21] feat: add gip stats (wip) --- package-lock.json | 26 +++ package.json | 1 + src/App.tsx | 9 +- src/components/GIPStats.tsx | 321 ++++++++++++++++++++++++++++++++++++ 4 files changed, 355 insertions(+), 2 deletions(-) create mode 100644 src/components/GIPStats.tsx diff --git a/package-lock.json b/package-lock.json index 06085510..61c23a68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@types/js-yaml": "^4.0.9", "bootstrap": "^5.3.3", "chartjs-plugin-annotation": "^3.1.0", + "chartjs-plugin-zoom": "^2.1.0", "js-yaml": "^4.1.0", "react": "^18.3.1", "react-bootstrap": "^2.10.5", @@ -1373,6 +1374,11 @@ "@types/estree": "*" } }, + "node_modules/@types/hammerjs": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", + "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==" + }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -2049,6 +2055,18 @@ "chart.js": ">=4.0.0" } }, + "node_modules/chartjs-plugin-zoom": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.1.0.tgz", + "integrity": "sha512-7lMimfQCUaIJLhPJaWSAA4gw+1m8lyR3Wn+M3MxjHbM/XxRUnOxN7cM5RR9jUmxmyW0h7L2hZ8KhvUsqrFxy/Q==", + "dependencies": { + "@types/hammerjs": "^2.0.45", + "hammerjs": "^2.0.8" + }, + "peerDependencies": { + "chart.js": ">=3.2.0" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2760,6 +2778,14 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", diff --git a/package.json b/package.json index 6b562890..c5327006 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@types/js-yaml": "^4.0.9", "bootstrap": "^5.3.3", "chartjs-plugin-annotation": "^3.1.0", + "chartjs-plugin-zoom": "^2.1.0", "js-yaml": "^4.1.0", "react": "^18.3.1", "react-bootstrap": "^2.10.5", diff --git a/src/App.tsx b/src/App.tsx index 28d0afd2..4593e1d9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from 'react'; // import GIPTable from './components/GIPTable'; import yaml from 'js-yaml'; import GIPTable from './components/GIPTable'; +import GIPStats from './components/GIPStats'; export interface GIP { author: string; @@ -102,8 +103,12 @@ function App() {
Search Component Here
- {} - {/* { */} + + + + + +
diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx new file mode 100644 index 00000000..d1660d94 --- /dev/null +++ b/src/components/GIPStats.tsx @@ -0,0 +1,321 @@ +import React from 'react'; +import { Bar, Pie } from 'react-chartjs-2'; +import 'chart.js/auto'; +import zoomPlugin from 'chartjs-plugin-zoom'; +import { Chart } from 'chart.js'; +import '../index.css'; +import ENSAuthorDisplay from './ENSAuthorDisplay'; + +Chart.register(zoomPlugin); + +const computeState = (scores, quorum, scores_state) => { + if (scores_state !== 'final') return ''; + if (!scores || scores.length < 3) return 'invalid'; + + const [firstScore, ...otherScores] = scores; + const isHighest = otherScores.every((score) => firstScore > score); + const meetsQuorum = firstScore > quorum; + return isHighest && meetsQuorum ? 'passed' : 'failed'; +}; + +const computeStatuses = (gips) => { + let passed = 0; + let failed = 0; + let open = 0; + + gips.forEach((gip) => { + const state = computeState(gip.scores, gip.quorum, gip.scores_state); + if (state === 'passed') passed++; + else if (state === 'failed') failed++; + else open++; + }); + + return [passed, failed, open]; +}; + +const GIPStats = ({ gips }) => { + const [passed, failed, open] = React.useMemo( + () => computeStatuses(gips), + [gips] + ); + + const votesByGIP = React.useMemo(() => { + const votesData = gips.map((gip) => ({ + x: parseInt(gip.gip_number, 10), + y: gip.votes || 0, + })); + return { + labels: gips.map((gip) => parseInt(gip.gip_number, 10)), + datasets: [ + { + label: 'Votes', + data: votesData, + backgroundColor: 'rgba(75, 192, 192, 0.6)', + borderColor: 'rgba(75, 192, 192, 1)', + borderWidth: 2, + }, + ], + }; + }, [gips]); + + const scoresTotalByGIP = React.useMemo(() => { + const scoresData = gips.map((gip) => ({ + x: parseInt(gip.gip_number, 10), + y: gip.scores_total || 0, + })); + + return { + labels: gips.map((gip) => parseInt(gip.gip_number, 10)), + datasets: [ + { + label: 'Amount', + data: scoresData, + backgroundColor: 'rgba(153, 102, 255, 0.6)', + borderColor: 'rgba(153, 102, 255, 1)', + borderWidth: 2, + }, + ], + }; + }, [gips]); + + const authorData = React.useMemo(() => { + const authorCounts = new Map(); + + // Handle null authors by replacing with "Unknown" + gips.forEach((gip) => { + const author = gip.author || 'Unknown'; + const count = authorCounts.get(author) || 0; + authorCounts.set(author, count + 1); + }); + + const sortedAuthors = Array.from(authorCounts.entries()) + .sort((a, b) => b[1] - a[1]) + .slice(0, 10); + + return { + data: { + labels: new Array(sortedAuthors.length).fill(''), + datasets: [ + { + label: 'Number of GIPs', + data: sortedAuthors.map(([_, count]) => count), + backgroundColor: 'rgba(54, 162, 235, 0.5)', + borderColor: 'rgba(54, 162, 235, 1)', + borderWidth: 1, + }, + ], + }, + authors: sortedAuthors.map(([author]) => author), + }; + }, [gips]); + + const statusGIP = { + labels: ['Passed', 'Failed', 'Open'], + datasets: [ + { + label: 'GIP Status', + data: [passed, failed, open], + backgroundColor: [ + 'rgba(75, 192, 192, 0.6)', // greenish + 'rgba(255, 99, 132, 0.6)', // reddish + 'rgba(255, 206, 86, 0.6)', // yellowish + ], + borderColor: [ + 'rgba(75, 192, 192, 1)', + 'rgba(255, 99, 132, 1)', + 'rgba(255, 206, 86, 1)', + ], + borderWidth: 1, + }, + ], + }; + + const optionsAuthor = { + indexAxis: 'y', + scales: { + x: { + beginAtZero: true, + title: { + display: true, + text: 'Number of GIPs', + }, + }, + y: { + ticks: { + display: false, // Hide default labels + }, + }, + }, + plugins: { + legend: { + display: false, + }, + tooltip: { + callbacks: { + label: function (context) { + return `GIPs: ${context.raw}`; + }, + title: function (context) { + const author = authorData.authors[context[0].dataIndex]; + return author; + }, + }, + }, + }, + maintainAspectRatio: false, + }; + + const options = { + plugins: { + legend: { + display: true, + position: 'left', + }, + }, + }; + + const chartOptions1 = { + scales: { + x: { + type: 'linear', + position: 'bottom', + ticks: { + stepSize: 1, + callback: function (value) { + if (value % 1 === 0) { + return value; + } + }, + }, + min: 0, + title: { + display: true, + text: 'GIP Number', + }, + }, + y: { + beginAtZero: true, + title: { + display: true, + text: 'No. of Votes', + }, + }, + }, + maintainAspectRatio: false, + plugins: { + zoom: { + limits: { + x: { min: 0, max: 'original', minRange: 1 }, + }, + zoom: { + wheel: { + enabled: false, + }, + pinch: { + enabled: true, + }, + mode: 'x', + onZoomComplete: function ({ chart }) { + let minVal = chart.scales.x.min; + if (minVal < 0) { + chart.scales.x.min = 0; + chart.update(); + } + }, + }, + pan: { + enabled: true, + mode: 'x', + onPanComplete: function ({ chart }) { + let minVal = chart.scales.x.min; + if (minVal < 0) { + chart.scales.x.min = 0; + chart.update(); + } + }, + }, + }, + }, + }; + + const chartOptions2 = { + ...chartOptions1, + scales: { + ...chartOptions1.scales, + y: { + beginAtZero: true, + title: { + display: true, + text: 'GNO Amount', + }, + }, + }, + }; + + return ( +
+

GIPs Status

+ +
+
+

Top-10 GIPs Proposers

+
+
+ {authorData.authors.map((author, index) => ( +
+ {author === 'Unknown' ? ( + Unknown + ) : ( + + )} +
+ ))} +
+
+ +
+
+
+
+ +
+
+

Votes by GIP

+ +
+
+

Total Amount by GIP

+ +
+
+
+ ); +}; + +export default GIPStats; From 6dd9b6e6c9861bdf9cfdc4dc87f27343e701a39f Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 04:21:31 +0100 Subject: [PATCH 14/21] feat: cleaning data charts --- src/components/GIPStats.tsx | 237 ++++++++---------------------------- 1 file changed, 54 insertions(+), 183 deletions(-) diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx index d1660d94..ef513fbe 100644 --- a/src/components/GIPStats.tsx +++ b/src/components/GIPStats.tsx @@ -1,12 +1,7 @@ import React from 'react'; -import { Bar, Pie } from 'react-chartjs-2'; -import 'chart.js/auto'; -import zoomPlugin from 'chartjs-plugin-zoom'; -import { Chart } from 'chart.js'; -import '../index.css'; +import { Bar } from 'react-chartjs-2'; import ENSAuthorDisplay from './ENSAuthorDisplay'; - -Chart.register(zoomPlugin); +import { GIP } from '../App'; const computeState = (scores, quorum, scores_state) => { if (scores_state !== 'final') return ''; @@ -33,7 +28,11 @@ const computeStatuses = (gips) => { return [passed, failed, open]; }; -const GIPStats = ({ gips }) => { +interface GIPStatsProps { + gips: GIP[]; +} + +const GIPStats = ({ gips }: GIPStatsProps) => { const [passed, failed, open] = React.useMemo( () => computeStatuses(gips), [gips] @@ -48,11 +47,8 @@ const GIPStats = ({ gips }) => { labels: gips.map((gip) => parseInt(gip.gip_number, 10)), datasets: [ { - label: 'Votes', data: votesData, - backgroundColor: 'rgba(75, 192, 192, 0.6)', - borderColor: 'rgba(75, 192, 192, 1)', - borderWidth: 2, + backgroundColor: '#42DAA3', }, ], }; @@ -68,11 +64,8 @@ const GIPStats = ({ gips }) => { labels: gips.map((gip) => parseInt(gip.gip_number, 10)), datasets: [ { - label: 'Amount', data: scoresData, - backgroundColor: 'rgba(153, 102, 255, 0.6)', - borderColor: 'rgba(153, 102, 255, 1)', - borderWidth: 2, + backgroundColor: '#42DAA3', }, ], }; @@ -97,11 +90,7 @@ const GIPStats = ({ gips }) => { labels: new Array(sortedAuthors.length).fill(''), datasets: [ { - label: 'Number of GIPs', data: sortedAuthors.map(([_, count]) => count), - backgroundColor: 'rgba(54, 162, 235, 0.5)', - borderColor: 'rgba(54, 162, 235, 1)', - borderWidth: 1, }, ], }, @@ -109,71 +98,6 @@ const GIPStats = ({ gips }) => { }; }, [gips]); - const statusGIP = { - labels: ['Passed', 'Failed', 'Open'], - datasets: [ - { - label: 'GIP Status', - data: [passed, failed, open], - backgroundColor: [ - 'rgba(75, 192, 192, 0.6)', // greenish - 'rgba(255, 99, 132, 0.6)', // reddish - 'rgba(255, 206, 86, 0.6)', // yellowish - ], - borderColor: [ - 'rgba(75, 192, 192, 1)', - 'rgba(255, 99, 132, 1)', - 'rgba(255, 206, 86, 1)', - ], - borderWidth: 1, - }, - ], - }; - - const optionsAuthor = { - indexAxis: 'y', - scales: { - x: { - beginAtZero: true, - title: { - display: true, - text: 'Number of GIPs', - }, - }, - y: { - ticks: { - display: false, // Hide default labels - }, - }, - }, - plugins: { - legend: { - display: false, - }, - tooltip: { - callbacks: { - label: function (context) { - return `GIPs: ${context.raw}`; - }, - title: function (context) { - const author = authorData.authors[context[0].dataIndex]; - return author; - }, - }, - }, - }, - maintainAspectRatio: false, - }; - - const options = { - plugins: { - legend: { - display: true, - position: 'left', - }, - }, - }; - const chartOptions1 = { scales: { x: { @@ -188,54 +112,12 @@ const GIPStats = ({ gips }) => { }, }, min: 0, - title: { - display: true, - text: 'GIP Number', - }, }, y: { beginAtZero: true, - title: { - display: true, - text: 'No. of Votes', - }, }, }, maintainAspectRatio: false, - plugins: { - zoom: { - limits: { - x: { min: 0, max: 'original', minRange: 1 }, - }, - zoom: { - wheel: { - enabled: false, - }, - pinch: { - enabled: true, - }, - mode: 'x', - onZoomComplete: function ({ chart }) { - let minVal = chart.scales.x.min; - if (minVal < 0) { - chart.scales.x.min = 0; - chart.update(); - } - }, - }, - pan: { - enabled: true, - mode: 'x', - onPanComplete: function ({ chart }) { - let minVal = chart.scales.x.min; - if (minVal < 0) { - chart.scales.x.min = 0; - chart.update(); - } - }, - }, - }, - }, }; const chartOptions2 = { @@ -244,75 +126,64 @@ const GIPStats = ({ gips }) => { ...chartOptions1.scales, y: { beginAtZero: true, - title: { - display: true, - text: 'GNO Amount', - }, }, }, }; return ( -
+

GIPs Status

- -
+
-

Top-10 GIPs Proposers

-
-
- {authorData.authors.map((author, index) => ( -
- {author === 'Unknown' ? ( - Unknown - ) : ( - - )} -
- ))} +
+
+

Passed

+
+ +
+
+
+

Failed

+
+ +
+
+
+

Open

+
+
+ +

Top-10 GIPs Proposers

+
+ {authorData.authors.map((author, index) => ( +
+
{index}
+
+ + {/* {authorData.data.datasets[author].data} */}
-
- -
-
+ ))}
-
-

Votes by GIP

- -
-
-

Total Amount by GIP

- -
+
+

Votes by GIP

+ +
+
+

Total Amount by GIP

+ +
); From 9234203b94091a2c8f7392cacf88954247b4e307 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 06:30:37 +0100 Subject: [PATCH 15/21] feat: add utils for compute state --- src/components/GIPItem.tsx | 17 +------- src/components/GIPStats.tsx | 78 ++++++------------------------------ src/components/StatusBar.tsx | 36 +++++++++++++++++ src/utils/computeState.ts | 30 ++++++++++++++ 4 files changed, 80 insertions(+), 81 deletions(-) create mode 100644 src/components/StatusBar.tsx create mode 100644 src/utils/computeState.ts diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 3fe78157..15af6dac 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -4,6 +4,7 @@ import ENSAuthorDisplay from './ENSAuthorDisplay'; import { GIP } from '../App'; import DynamicChart from './DynamicChart'; import { useState } from 'react'; +import { computeState } from '../utils/computeState'; interface GIPItemProps { gip: GIP; @@ -26,20 +27,6 @@ const GIPItem = ({ gip }: GIPItemProps) => { }); }; - const computeState = ( - scores: string | any[], - quorum: number, - scores_state: string - ) => { - if (scores_state !== 'final') return ''; - if (!scores || scores.length < 3) return 'invalid'; - - const [firstScore, ...otherScores] = scores; - const isHighest = otherScores.every((score) => firstScore > score); - const meetsQuorum = firstScore > quorum; - return isHighest && meetsQuorum ? 'passed' : 'failed'; - }; - const renderFundingInfo = (gip: GIP) => { if (gip.funding && gip.funding.amount && gip.funding.currency) { return `${gip.funding.amount} ${gip.funding.currency}`; @@ -50,7 +37,7 @@ const GIPItem = ({ gip }: GIPItemProps) => { const state = computeState(gip.scores, gip.quorum, gip.scores_state); const renderChart = ( - scores: string | any[], + scores: number[], scores_total: number, scores_state: string, quorum: number diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx index ef513fbe..76a64516 100644 --- a/src/components/GIPStats.tsx +++ b/src/components/GIPStats.tsx @@ -2,31 +2,8 @@ import React from 'react'; import { Bar } from 'react-chartjs-2'; import ENSAuthorDisplay from './ENSAuthorDisplay'; import { GIP } from '../App'; - -const computeState = (scores, quorum, scores_state) => { - if (scores_state !== 'final') return ''; - if (!scores || scores.length < 3) return 'invalid'; - - const [firstScore, ...otherScores] = scores; - const isHighest = otherScores.every((score) => firstScore > score); - const meetsQuorum = firstScore > quorum; - return isHighest && meetsQuorum ? 'passed' : 'failed'; -}; - -const computeStatuses = (gips) => { - let passed = 0; - let failed = 0; - let open = 0; - - gips.forEach((gip) => { - const state = computeState(gip.scores, gip.quorum, gip.scores_state); - if (state === 'passed') passed++; - else if (state === 'failed') failed++; - else open++; - }); - - return [passed, failed, open]; -}; +import StatusBars from './StatusBar'; +import { computeStatuses } from '../utils/computeState'; interface GIPStatsProps { gips: GIP[]; @@ -98,7 +75,7 @@ const GIPStats = ({ gips }: GIPStatsProps) => { }; }, [gips]); - const chartOptions1 = { + const chartOptions = { scales: { x: { type: 'linear', @@ -120,52 +97,21 @@ const GIPStats = ({ gips }: GIPStatsProps) => { maintainAspectRatio: false, }; - const chartOptions2 = { - ...chartOptions1, - scales: { - ...chartOptions1.scales, - y: { - beginAtZero: true, - }, - }, - }; - return (

GIPs Status

-
-
-
-
-

Passed

-
-
-
-
-

Failed

-
- -
-
-
-

Open

-
-
+

Top-10 GIPs Proposers

{authorData.authors.map((author, index) => ( -
+
{index}
@@ -178,11 +124,11 @@ const GIPStats = ({ gips }: GIPStatsProps) => {

Votes by GIP

- +

Total Amount by GIP

- +
diff --git a/src/components/StatusBar.tsx b/src/components/StatusBar.tsx new file mode 100644 index 00000000..c225283b --- /dev/null +++ b/src/components/StatusBar.tsx @@ -0,0 +1,36 @@ +const StatusBars = ({ + passed, + failed, + open, + total, +}: { + passed: number; + failed: number; + open: number; + total: number; +}) => ( +
+ {[ + { label: 'Passed', count: passed, color: '#42DAA3' }, + { label: 'Failed', count: failed, color: '#F21162' }, + { label: 'Open', count: open, color: 'black' }, + ].map(({ label, count, color }) => ( +
+
+
+

+ {label} +

+
+ ))} +
+); + +export default StatusBars; diff --git a/src/utils/computeState.ts b/src/utils/computeState.ts new file mode 100644 index 00000000..93505be1 --- /dev/null +++ b/src/utils/computeState.ts @@ -0,0 +1,30 @@ +import { GIP } from "../App"; + +export const computeState = ( + scores: number[], + quorum: number, + scores_state: string +) => { + if (scores_state !== 'final') return ''; + if (!scores || scores.length < 3) return 'invalid'; + + const [firstScore, ...otherScores] = scores; + const isHighest = otherScores.every((score) => firstScore > score); + const meetsQuorum = firstScore > quorum; + return isHighest && meetsQuorum ? 'passed' : 'failed'; +}; + +export const computeStatuses = (gips: GIP[]) => { + let passed = 0; + let failed = 0; + let open = 0; + + gips.forEach((gip) => { + const state = computeState(gip.scores, gip.quorum, gip.scores_state); + if (state === 'passed') passed++; + else if (state === 'failed') failed++; + else open++; + }); + + return [passed, failed, open]; +}; \ No newline at end of file From 6ff3798847b75af54d84cc2358055ebc760057dd Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 06:52:26 +0100 Subject: [PATCH 16/21] feat: cleanin data charts --- src/components/GIPStats.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx index 76a64516..650f4166 100644 --- a/src/components/GIPStats.tsx +++ b/src/components/GIPStats.tsx @@ -76,13 +76,18 @@ const GIPStats = ({ gips }: GIPStatsProps) => { }, [gips]); const chartOptions = { + plugins: { + legend: { + display: false, + }, + }, scales: { x: { type: 'linear', position: 'bottom', ticks: { - stepSize: 1, - callback: function (value) { + stepSize: 5, + callback: function (value: number) { if (value % 1 === 0) { return value; } From df6dd4ea70d786bf610ec8374b059d30ba822567 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 06:58:02 +0100 Subject: [PATCH 17/21] fix: typing data for chart options --- src/components/GIPStats.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx index 650f4166..7a202041 100644 --- a/src/components/GIPStats.tsx +++ b/src/components/GIPStats.tsx @@ -4,6 +4,7 @@ import ENSAuthorDisplay from './ENSAuthorDisplay'; import { GIP } from '../App'; import StatusBars from './StatusBar'; import { computeStatuses } from '../utils/computeState'; +import { ChartOptions } from 'chart.js'; interface GIPStatsProps { gips: GIP[]; @@ -75,7 +76,7 @@ const GIPStats = ({ gips }: GIPStatsProps) => { }; }, [gips]); - const chartOptions = { + const chartOptions: ChartOptions<'bar'> = { plugins: { legend: { display: false, @@ -87,10 +88,11 @@ const GIPStats = ({ gips }: GIPStatsProps) => { position: 'bottom', ticks: { stepSize: 5, - callback: function (value: number) { - if (value % 1 === 0) { - return value; + callback: function (tickValue: string | number) { + if (typeof tickValue === 'number' && tickValue % 1 === 0) { + return tickValue.toString(); } + return null; }, }, min: 0, From aa6a5d4b1ab50da61c69924348c913d31738d003 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 07:28:14 +0100 Subject: [PATCH 18/21] feat; styling top 10 proposers component --- src/components/GIPStats.tsx | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/components/GIPStats.tsx b/src/components/GIPStats.tsx index 7a202041..af2b850e 100644 --- a/src/components/GIPStats.tsx +++ b/src/components/GIPStats.tsx @@ -85,15 +85,8 @@ const GIPStats = ({ gips }: GIPStatsProps) => { scales: { x: { type: 'linear', - position: 'bottom', ticks: { stepSize: 5, - callback: function (tickValue: string | number) { - if (typeof tickValue === 'number' && tickValue % 1 === 0) { - return tickValue.toString(); - } - return null; - }, }, min: 0, }, @@ -120,9 +113,9 @@ const GIPStats = ({ gips }: GIPStatsProps) => { {authorData.authors.map((author, index) => (
{index}
-
- - {/* {authorData.data.datasets[author].data} */} +
+
+
{authorData.data.datasets[0].data[index]}
))} From 95294f1592e523ca6751fd95564f51cf5e092d95 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 09:03:15 +0100 Subject: [PATCH 19/21] feat: add search component --- src/App.tsx | 16 +++-- src/components/DynamicChart.tsx | 17 +++-- src/components/GIPItem.tsx | 1 - src/components/GIPTable.tsx | 107 +++++++++++++------------------- 4 files changed, 68 insertions(+), 73 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 4593e1d9..2dad74b3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,6 @@ import { Tab, TabList, TabPanel, Tabs } from 'react-tabs'; import './App.css'; import { useEffect, useState } from 'react'; -// import GIPTable from './components/GIPTable'; import yaml from 'js-yaml'; import GIPTable from './components/GIPTable'; import GIPStats from './components/GIPStats'; @@ -32,6 +31,7 @@ export interface GIP { function App() { const [gips, setGips] = useState([]); + const [searchTerm, setSearchTerm] = useState(''); const loadGIPs = async () => { try { @@ -91,7 +91,7 @@ function App() {

Gnosis Governance Dashboard

-
+
Overview @@ -100,11 +100,19 @@ function App() { Stats -
Search Component Here
+
+ setSearchTerm(e.target.value)} + className='underline focus:outline-none w-44' + /> +
- + diff --git a/src/components/DynamicChart.tsx b/src/components/DynamicChart.tsx index 03ff0af7..4651ade5 100644 --- a/src/components/DynamicChart.tsx +++ b/src/components/DynamicChart.tsx @@ -21,16 +21,23 @@ const BarChartIcon = () => ( ); -const DynamicChart = ({ scores, scores_total, scores_state, quorum }) => { - const [chartType, setChartType] = useState('bar'); + interface DynamicChartProps { + scores: number[], + scores_total: number, + scores_state: string, + quorum: number + } + +const DynamicChart = ({ scores, scores_total, scores_state, quorum }: DynamicChartProps) => { + const [chartType, setChartType] = useState<'bar' | 'pie'>('bar'); const [legendPosition, setLegendPosition] = useState({ x: 0, y: 0 }); const [showLegend, setShowLegend] = useState(false); - const containerRef = useRef(null); + const containerRef = useRef(null); useEffect(() => { const container = containerRef.current; - const handleMouseMove = (event) => { + const handleMouseMove = (event: MouseEvent) => { if (container) { const rect = container.getBoundingClientRect(); const x = event.clientX - rect.left; @@ -200,7 +207,7 @@ const DynamicChart = ({ scores, scores_total, scores_state, quorum }) => { ))} -
+
Total: diff --git a/src/components/GIPItem.tsx b/src/components/GIPItem.tsx index 15af6dac..69bedcc8 100644 --- a/src/components/GIPItem.tsx +++ b/src/components/GIPItem.tsx @@ -1,4 +1,3 @@ -import { Card } from 'react-bootstrap'; import ReactMarkdown from 'react-markdown'; import ENSAuthorDisplay from './ENSAuthorDisplay'; import { GIP } from '../App'; diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index e571277d..3c291222 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -1,51 +1,50 @@ import { useState, useMemo } from 'react'; -import { Chart, registerables } from 'chart.js'; -import 'chart.js/auto'; -import '../index.css'; -import annotationPlugin from 'chartjs-plugin-annotation'; import GIPItem from './GIPItem'; import { GIP } from '../App'; -Chart.register(...registerables, annotationPlugin); - interface GIPTableProps { gips: GIP[]; + searchTerm: string; } -const GIPTable = ({ gips }: GIPTableProps) => { - const [searchTermNo, setSearchTermNo] = useState(''); - const [searchTermTitle, setSearchTermTitle] = useState(''); +const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { const [sortState, setSortState] = useState({ column: 'gip_number', state: 'desc', }); const [visibleCount, setVisibleCount] = useState(20); - const filteredGips = useMemo(() => { - return gips - .filter((gip) => { - const matchesNo = gip.gip_number.toString().includes(searchTermNo); - const matchesTitle = gip.title - .toLowerCase() - .includes(searchTermTitle.toLowerCase()); - return matchesNo && matchesTitle; - }) - .sort((a, b) => { - const column = sortState.column; - const order = sortState.state === 'asc' ? 1 : -1; - let valA = a[column]; - let valB = b[column]; - if (column === 'gip_number') { - valA = parseInt(valA, 10); - valB = parseInt(valB, 10); - } - return valA < valB ? -order : valA > valB ? order : 0; - }); - }, [gips, searchTermNo, searchTermTitle, sortState]); + const filteredAndSortedGips = useMemo(() => { + const lowerSearchTerm = searchTerm.toLowerCase(); + + const filtered = gips.filter((gip) => { + return ( + gip.gip_number.toString().includes(lowerSearchTerm) || + gip.title.toLowerCase().includes(lowerSearchTerm) + ); + }); + + const sorted = filtered.sort((a, b) => { + const column = sortState.column; + const order = sortState.state === 'asc' ? 1 : -1; + + let valA = a[column]; + let valB = b[column]; + + if (column === 'gip_number') { + valA = parseInt(valA, 10); + valB = parseInt(valB, 10); + } + + return valA < valB ? -order : valA > valB ? order : 0; + }); + + return sorted; + }, [gips, searchTerm, sortState]); const visibleGips = useMemo(() => { - return filteredGips.slice(0, visibleCount); - }, [filteredGips, visibleCount]); + return filteredAndSortedGips.slice(0, visibleCount); + }, [filteredAndSortedGips, visibleCount]); const loadMore = () => { setVisibleCount((prev) => prev + 20); @@ -53,38 +52,20 @@ const GIPTable = ({ gips }: GIPTableProps) => { return (
- {/*
- setSearchTermNo(e.target.value)} - /> - setSearchTermTitle(e.target.value)} - /> -
*/} -
- {/* - No. - Title - Started - State - Status - Actions - */} -
- {visibleGips.map((gip) => ( - - ))} -
+
+ {visibleGips.map((gip) => ( + + ))}
- {visibleCount < filteredGips.length && ( -
- + + {visibleCount < filteredAndSortedGips.length && ( +
+
)}
From 29bf7f5dc8e6c449bd358c6cfaab0c1b24f01dae Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 09:56:26 +0100 Subject: [PATCH 20/21] fix: typing error ing GIP table component --- src/App.tsx | 2 +- src/components/GIPTable.tsx | 101 ++++++++++++++++++++++++++++++++---- 2 files changed, 93 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 2dad74b3..86f83c10 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,7 +22,7 @@ export interface GIP { scores: number[]; scores_state: string; scores_total: number; - start: number; + start: string; state: string; title: string; url: string; diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index 3c291222..b4e3847b 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -8,7 +8,10 @@ interface GIPTableProps { } const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { - const [sortState, setSortState] = useState({ + const [sortState, setSortState] = useState<{ + column: 'gip_number' | 'title' | 'start' | 'state'; + state: 'asc' | 'desc'; + }>({ column: 'gip_number', state: 'desc', }); @@ -28,12 +31,14 @@ const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { const column = sortState.column; const order = sortState.state === 'asc' ? 1 : -1; - let valA = a[column]; - let valB = b[column]; + const valA = a[column]; + const valB = b[column]; if (column === 'gip_number') { - valA = parseInt(valA, 10); - valB = parseInt(valB, 10); + const valANum = parseInt(valA, 10); + const valBNum = parseInt(valB, 10); + + return valANum < valBNum ? -order : valANum > valBNum ? order : 0; } return valA < valB ? -order : valA > valB ? order : 0; @@ -52,6 +57,87 @@ const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { return (
+
+ +
+ + + +
+
+
{visibleGips.map((gip) => ( @@ -60,10 +146,7 @@ const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { {visibleCount < filteredAndSortedGips.length && (
-
From c32da5337da452d7f0c6129f48894f2701daac16 Mon Sep 17 00:00:00 2001 From: Wagalidoom Date: Wed, 20 Nov 2024 09:59:20 +0100 Subject: [PATCH 21/21] fix: build errors --- src/App.tsx | 2 +- src/components/GIPTable.tsx | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 86f83c10..2dad74b3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,7 +22,7 @@ export interface GIP { scores: number[]; scores_state: string; scores_total: number; - start: string; + start: number; state: string; title: string; url: string; diff --git a/src/components/GIPTable.tsx b/src/components/GIPTable.tsx index b4e3847b..fdf6e0ef 100644 --- a/src/components/GIPTable.tsx +++ b/src/components/GIPTable.tsx @@ -31,14 +31,13 @@ const GIPTable = ({ gips, searchTerm }: GIPTableProps) => { const column = sortState.column; const order = sortState.state === 'asc' ? 1 : -1; - const valA = a[column]; - const valB = b[column]; + let valA = a[column]; + let valB = b[column]; if (column === 'gip_number') { - const valANum = parseInt(valA, 10); - const valBNum = parseInt(valB, 10); + valA = parseInt(valA as string, 10); + valB = parseInt(valB as string, 10); - return valANum < valBNum ? -order : valANum > valBNum ? order : 0; } return valA < valB ? -order : valA > valB ? order : 0;