diff --git a/.env.example b/.env.example
new file mode 100644
index 00000000..15d85e73
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,3 @@
+NEXT_PUBLIC_HOST_URL='http://localhost:3000'
+NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID=
+NEXT_PUBLIC_GOOGLE_ANALYTICS_DOMAIN=
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..1514a3e1
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,28 @@
+module.exports = {
+ parser: '@typescript-eslint/parser',
+ extends: [
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:security/recommended-legacy',
+ 'standard-with-typescript',
+ 'next/core-web-vitals'
+ ],
+ parserOptions: {
+ project: './tsconfig.json'
+ },
+ ignorePatterns: ['.eslintrc.js', 'next.config.js', 'next-env.d.ts', 'out'],
+ rules: {
+ '@typescript-eslint/key-spacing': 0,
+ 'multiline-ternary': 0,
+ 'no-console': ['error', { allow: ['info', 'warn', 'error'] }],
+ 'max-len': [
+ 2,
+ {
+ code: 100,
+ ignoreComments: true,
+ ignoreStrings: true,
+ ignoreTemplateLiterals: true,
+ ignoreUrls: true
+ }
+ ]
+ }
+}
diff --git a/.gitbook.yaml b/.gitbook.yaml
deleted file mode 100644
index cc03e8f2..00000000
--- a/.gitbook.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-root: ./
-
-redirects:
- safe-core-protocol: safe-smart-account
- safe-core-protocol/plugins: safe-smart-account/modules.md
- safe-core-protocol/hooks: safe-smart-account/guards.md
- safe-core-protocol/security: safe-smart-account/security/README.md
- safe-core-protocol/security/bug-bounty-program: safe-smart-account/security/bug-bounty-program.md
- safe-core-protocol/security/security-audits: safe-smart-account/security/security-audits.md
- safe-core-protocol/signatures: safe-smart-account/signatures/README.md
- safe-core-protocol/signatures/eip-1271: safe-smart-account/signatures/eip-1271.md
diff --git a/.gitbook/assets/diagram-safe-ecosystem.png b/.gitbook/assets/diagram-safe-ecosystem.png
deleted file mode 100644
index 90dbce99..00000000
Binary files a/.gitbook/assets/diagram-safe-ecosystem.png and /dev/null differ
diff --git a/.gitbook/assets/diagram-safe-tools.png b/.gitbook/assets/diagram-safe-tools.png
deleted file mode 100644
index 3fb6b4e8..00000000
Binary files a/.gitbook/assets/diagram-safe-tools.png and /dev/null differ
diff --git a/.gitbook/assets/diagram-third-party-custody.png b/.gitbook/assets/diagram-third-party-custody.png
deleted file mode 100644
index d5b52602..00000000
Binary files a/.gitbook/assets/diagram-third-party-custody.png and /dev/null differ
diff --git a/.gitbook/assets/eoas-vs-smart-accounts.png b/.gitbook/assets/eoas-vs-smart-accounts.png
deleted file mode 100644
index cd81e3cb..00000000
Binary files a/.gitbook/assets/eoas-vs-smart-accounts.png and /dev/null differ
diff --git a/.gitbook/assets/safe-iceberg.png b/.gitbook/assets/safe-iceberg.png
deleted file mode 100644
index 7f6b55e2..00000000
Binary files a/.gitbook/assets/safe-iceberg.png and /dev/null differ
diff --git a/.gitbook/assets/table-compare-storage-solutions.png b/.gitbook/assets/table-compare-storage-solutions.png
deleted file mode 100644
index c0b293c7..00000000
Binary files a/.gitbook/assets/table-compare-storage-solutions.png and /dev/null differ
diff --git a/.github/scripts/generateSupportedNetworks.js b/.github/scripts/generateSupportedNetworks.js
new file mode 100644
index 00000000..e45856dc
--- /dev/null
+++ b/.github/scripts/generateSupportedNetworks.js
@@ -0,0 +1,156 @@
+// This script generates the supported networks page from the safe-deployments repo.
+// It clones the repo, reads the JSON files, and generates the markdown files as well as a _meta.json file for nextra.
+
+const shell = require('shelljs')
+const fs = require('fs')
+const path = require('path')
+
+// Explore a given directory recursively and return all the file paths
+const walkPath = dir => {
+ let results = []
+ const list = fs.readdirSync(dir)
+ list.forEach(function (file) {
+ const filePath = path.join(dir, file)
+ const stat = fs.statSync(filePath)
+ if (stat?.isDirectory()) {
+ results = results.concat(walkPath(filePath))
+ } else {
+ results.push(filePath)
+ }
+ })
+
+ return results
+}
+
+// Reduce function to deduplicate an array
+const deduplicate = (acc, curr) => {
+ if (acc.includes(curr)) {
+ return acc
+ }
+
+ return [...acc, curr]
+}
+
+const supportedNetworksPath = './pages/smart-account-supported-networks'
+
+const generateSupportedNetworks = async () => {
+ const deploymentRepoUrl = 'https://github.com/safe-global/safe-deployments/'
+ shell.exec(`git clone ${deploymentRepoUrl} ./deployments`)
+ shell.rm('-rf', supportedNetworksPath)
+
+ const fetch = await import('node-fetch')
+ const paths = walkPath('deployments/src/assets').map(p =>
+ p.replace('deployments/src/assets/', '')
+ )
+
+ const allNetworks = await fetch
+ .default('https://chainid.network/chains.json')
+ .then(res => res.json())
+
+ const contracts = paths.map(p => {
+ const file = fs.readFileSync(`deployments/src/assets/${p}`, 'utf8')
+ const json = JSON.parse(file)
+
+ return Object.entries(json.networkAddresses).map(([chainId, address]) => ({
+ name: p.split('/')[1].split('.')[0],
+ version: p.split('/')[0],
+ address,
+ chainId,
+ chainName: allNetworks.find(n => n.chainId === parseInt(chainId))?.name,
+ blockExplorerUrl: allNetworks.find(n => n.chainId === parseInt(chainId))
+ ?.explorers?.[0]?.url
+ }))
+ })
+
+ const versions = contracts
+ .flat()
+ .map(c => c.version)
+ .reduce(deduplicate, [])
+ .reverse()
+
+ shell.mkdir(supportedNetworksPath)
+
+ versions.forEach(version => {
+ const _contracts = contracts.flat().filter(c => c.version === version)
+
+ const networks = Object.entries(
+ _contracts.reduce((acc, curr) => {
+ const { chainId, chainName } = curr
+ if (acc[chainId]) {
+ return acc
+ }
+
+ return {
+ ...acc,
+ [chainId]: chainName
+ }
+ }, {})
+ )
+
+ const content = `# ${version}
+
+This page lists the addresses of all the Safe contracts \`${version}\` grouped by chain.
+
+## Networks
+${networks
+ .map(([chainId, network]) => {
+ return `
+### ${network}
+
+This network's chain ID is ${chainId}.
+
+${_contracts
+ .filter(c => c.chainId === chainId)
+ .map(
+ c =>
+ `- \`${c.name}.sol\`: ${
+ c.blockExplorerUrl == null ||
+ deprecatedBlockExplorers.includes(c.blockExplorerUrl)
+ ? c.address
+ : `[${c.address}](${c.blockExplorerUrl}/address/${c.address})`
+ }`
+ )
+ .join('\n')}
+`
+ })
+ .join('\n')}
+
+ `
+ fs.writeFileSync(`${supportedNetworksPath}/${version}.md`, content)
+ })
+
+ // Generate _meta.json file to order versions in descending order
+ fs.writeFileSync(
+ `${supportedNetworksPath}/_meta.json`,
+ JSON.stringify(
+ versions.reduce((acc, curr) => ({ ...acc, [curr]: curr }), {}),
+ null,
+ 2
+ )
+ )
+
+ shell.rm('-rf', './deployments')
+}
+
+generateSupportedNetworks()
+
+const deprecatedBlockExplorers = [
+ 'https://blockexplorer.avax.boba.network',
+ 'https://blockexplorer.bobabeam.boba.network',
+ 'https://blockexplorer.rinkeby.boba.network',
+ 'https://evm.explorer.canto.io',
+ 'https://evm-testnet.venidiumexplorer.com',
+ 'https://evm.venidiumexplorer.com',
+ 'https://explorer.autobahn.network',
+ 'https://explorer.eurus.network',
+ 'https://explorer.tst.publicmint.io',
+ 'https://goerli.arbiscan.io',
+ 'https://kovan-optimistic.etherscan.io',
+ 'https://rabbit.analogscan.com',
+ 'https://rinkeby.etherscan.io',
+ 'https://ropsten.etherscan.io',
+ 'https://stardust-explorer.metis.io',
+ 'https://testnet.arbiscan.io',
+ 'https://testnet.torusscan.com',
+ 'https://testnetexplorer.eurus.network'
+]
diff --git a/.github/scripts/prepar_production_deployment.sh b/.github/scripts/prepar_production_deployment.sh
new file mode 100644
index 00000000..1d15edc5
--- /dev/null
+++ b/.github/scripts/prepar_production_deployment.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -ev
+
+# Only:
+# - Tagged commits
+# - Security env variables are available.
+if [ -n "$VERSION_TAG" ] && [ -n "$PROD_DEPLOYMENT_HOOK_TOKEN" ] && [ -n "$PROD_DEPLOYMENT_HOOK_URL" ]
+then
+ curl --silent --output /dev/null --write-out "%{http_code}" -X POST \
+ -F token="$PROD_DEPLOYMENT_HOOK_TOKEN" \
+ -F ref=master \
+ -F "variables[TRIGGER_RELEASE_COMMIT_TAG]=$VERSION_TAG" \
+ $PROD_DEPLOYMENT_HOOK_URL
+else
+ echo "[ERROR] Production deployment could not be prepared"
+fi
diff --git a/.github/scripts/s3_upload.sh b/.github/scripts/s3_upload.sh
new file mode 100644
index 00000000..fab6b81a
--- /dev/null
+++ b/.github/scripts/s3_upload.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -ev
+
+aws s3 sync ./out $BUCKET --delete
+
+# Upload all HTML files again but w/o an extention so that URLs like /welcome open the right page
+
+cd out
+
+for file in $(find . -name '*.html' | sed 's|^\./||'); do
+ aws s3 cp ${file%} $BUCKET/${file%.*} --content-type 'text/html'
+done
\ No newline at end of file
diff --git a/styles/Microsoft/AMPM.yml b/.github/styles/Microsoft/AMPM.yml
similarity index 100%
rename from styles/Microsoft/AMPM.yml
rename to .github/styles/Microsoft/AMPM.yml
diff --git a/styles/Microsoft/Accessibility.yml b/.github/styles/Microsoft/Accessibility.yml
similarity index 100%
rename from styles/Microsoft/Accessibility.yml
rename to .github/styles/Microsoft/Accessibility.yml
diff --git a/styles/Microsoft/Acronyms.yml b/.github/styles/Microsoft/Acronyms.yml
similarity index 100%
rename from styles/Microsoft/Acronyms.yml
rename to .github/styles/Microsoft/Acronyms.yml
diff --git a/styles/Microsoft/Adverbs.yml b/.github/styles/Microsoft/Adverbs.yml
similarity index 100%
rename from styles/Microsoft/Adverbs.yml
rename to .github/styles/Microsoft/Adverbs.yml
diff --git a/styles/Microsoft/Auto.yml b/.github/styles/Microsoft/Auto.yml
similarity index 100%
rename from styles/Microsoft/Auto.yml
rename to .github/styles/Microsoft/Auto.yml
diff --git a/styles/Microsoft/Avoid.yml b/.github/styles/Microsoft/Avoid.yml
similarity index 100%
rename from styles/Microsoft/Avoid.yml
rename to .github/styles/Microsoft/Avoid.yml
diff --git a/styles/Microsoft/ComplexWords.yml b/.github/styles/Microsoft/ComplexWords.yml
similarity index 100%
rename from styles/Microsoft/ComplexWords.yml
rename to .github/styles/Microsoft/ComplexWords.yml
diff --git a/styles/Microsoft/Contractions.yml b/.github/styles/Microsoft/Contractions.yml
similarity index 100%
rename from styles/Microsoft/Contractions.yml
rename to .github/styles/Microsoft/Contractions.yml
diff --git a/styles/Microsoft/Dashes.yml b/.github/styles/Microsoft/Dashes.yml
similarity index 100%
rename from styles/Microsoft/Dashes.yml
rename to .github/styles/Microsoft/Dashes.yml
diff --git a/styles/Microsoft/DateFormat.yml b/.github/styles/Microsoft/DateFormat.yml
similarity index 100%
rename from styles/Microsoft/DateFormat.yml
rename to .github/styles/Microsoft/DateFormat.yml
diff --git a/styles/Microsoft/DateNumbers.yml b/.github/styles/Microsoft/DateNumbers.yml
similarity index 100%
rename from styles/Microsoft/DateNumbers.yml
rename to .github/styles/Microsoft/DateNumbers.yml
diff --git a/styles/Microsoft/DateOrder.yml b/.github/styles/Microsoft/DateOrder.yml
similarity index 93%
rename from styles/Microsoft/DateOrder.yml
rename to .github/styles/Microsoft/DateOrder.yml
index 12d69ba5..bd9e0e95 100644
--- a/styles/Microsoft/DateOrder.yml
+++ b/.github/styles/Microsoft/DateOrder.yml
@@ -2,7 +2,7 @@ extends: existence
message: "Always spell out the name of the month."
link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates
ignorecase: true
-level: error
+level: warning
nonword: true
tokens:
- '\b\d{1,2}/\d{1,2}/(?:\d{4}|\d{2})\b'
diff --git a/styles/Microsoft/Ellipses.yml b/.github/styles/Microsoft/Ellipses.yml
similarity index 100%
rename from styles/Microsoft/Ellipses.yml
rename to .github/styles/Microsoft/Ellipses.yml
diff --git a/styles/Microsoft/FirstPerson.yml b/.github/styles/Microsoft/FirstPerson.yml
similarity index 100%
rename from styles/Microsoft/FirstPerson.yml
rename to .github/styles/Microsoft/FirstPerson.yml
diff --git a/styles/Microsoft/Foreign.yml b/.github/styles/Microsoft/Foreign.yml
similarity index 100%
rename from styles/Microsoft/Foreign.yml
rename to .github/styles/Microsoft/Foreign.yml
diff --git a/styles/Microsoft/Gender.yml b/.github/styles/Microsoft/Gender.yml
similarity index 100%
rename from styles/Microsoft/Gender.yml
rename to .github/styles/Microsoft/Gender.yml
diff --git a/styles/Microsoft/GenderBias.yml b/.github/styles/Microsoft/GenderBias.yml
similarity index 100%
rename from styles/Microsoft/GenderBias.yml
rename to .github/styles/Microsoft/GenderBias.yml
diff --git a/styles/Microsoft/GeneralURL.yml b/.github/styles/Microsoft/GeneralURL.yml
similarity index 100%
rename from styles/Microsoft/GeneralURL.yml
rename to .github/styles/Microsoft/GeneralURL.yml
diff --git a/styles/Microsoft/HeadingAcronyms.yml b/.github/styles/Microsoft/HeadingAcronyms.yml
similarity index 100%
rename from styles/Microsoft/HeadingAcronyms.yml
rename to .github/styles/Microsoft/HeadingAcronyms.yml
diff --git a/styles/Microsoft/HeadingColons.yml b/.github/styles/Microsoft/HeadingColons.yml
similarity index 100%
rename from styles/Microsoft/HeadingColons.yml
rename to .github/styles/Microsoft/HeadingColons.yml
diff --git a/styles/Microsoft/HeadingPunctuation.yml b/.github/styles/Microsoft/HeadingPunctuation.yml
similarity index 100%
rename from styles/Microsoft/HeadingPunctuation.yml
rename to .github/styles/Microsoft/HeadingPunctuation.yml
diff --git a/styles/Microsoft/Headings.yml b/.github/styles/Microsoft/Headings.yml
similarity index 100%
rename from styles/Microsoft/Headings.yml
rename to .github/styles/Microsoft/Headings.yml
diff --git a/styles/Microsoft/Hyphens.yml b/.github/styles/Microsoft/Hyphens.yml
similarity index 100%
rename from styles/Microsoft/Hyphens.yml
rename to .github/styles/Microsoft/Hyphens.yml
diff --git a/styles/Microsoft/Negative.yml b/.github/styles/Microsoft/Negative.yml
similarity index 100%
rename from styles/Microsoft/Negative.yml
rename to .github/styles/Microsoft/Negative.yml
diff --git a/styles/Microsoft/Ordinal.yml b/.github/styles/Microsoft/Ordinal.yml
similarity index 100%
rename from styles/Microsoft/Ordinal.yml
rename to .github/styles/Microsoft/Ordinal.yml
diff --git a/styles/Microsoft/OxfordComma.yml b/.github/styles/Microsoft/OxfordComma.yml
similarity index 100%
rename from styles/Microsoft/OxfordComma.yml
rename to .github/styles/Microsoft/OxfordComma.yml
diff --git a/styles/Microsoft/Passive.yml b/.github/styles/Microsoft/Passive.yml
similarity index 100%
rename from styles/Microsoft/Passive.yml
rename to .github/styles/Microsoft/Passive.yml
diff --git a/styles/Microsoft/Percentages.yml b/.github/styles/Microsoft/Percentages.yml
similarity index 100%
rename from styles/Microsoft/Percentages.yml
rename to .github/styles/Microsoft/Percentages.yml
diff --git a/styles/Microsoft/Quotes.yml b/.github/styles/Microsoft/Quotes.yml
similarity index 100%
rename from styles/Microsoft/Quotes.yml
rename to .github/styles/Microsoft/Quotes.yml
diff --git a/styles/Microsoft/RangeFormat.yml b/.github/styles/Microsoft/RangeFormat.yml
similarity index 100%
rename from styles/Microsoft/RangeFormat.yml
rename to .github/styles/Microsoft/RangeFormat.yml
diff --git a/styles/Microsoft/RangeTime.yml b/.github/styles/Microsoft/RangeTime.yml
similarity index 100%
rename from styles/Microsoft/RangeTime.yml
rename to .github/styles/Microsoft/RangeTime.yml
diff --git a/styles/Microsoft/Ranges.yml b/.github/styles/Microsoft/Ranges.yml
similarity index 100%
rename from styles/Microsoft/Ranges.yml
rename to .github/styles/Microsoft/Ranges.yml
diff --git a/styles/Microsoft/Semicolon.yml b/.github/styles/Microsoft/Semicolon.yml
similarity index 100%
rename from styles/Microsoft/Semicolon.yml
rename to .github/styles/Microsoft/Semicolon.yml
diff --git a/styles/Microsoft/SentenceLength.yml b/.github/styles/Microsoft/SentenceLength.yml
similarity index 100%
rename from styles/Microsoft/SentenceLength.yml
rename to .github/styles/Microsoft/SentenceLength.yml
diff --git a/styles/Microsoft/Spacing.yml b/.github/styles/Microsoft/Spacing.yml
similarity index 100%
rename from styles/Microsoft/Spacing.yml
rename to .github/styles/Microsoft/Spacing.yml
diff --git a/styles/Microsoft/Suspended.yml b/.github/styles/Microsoft/Suspended.yml
similarity index 100%
rename from styles/Microsoft/Suspended.yml
rename to .github/styles/Microsoft/Suspended.yml
diff --git a/styles/Microsoft/Terms.yml b/.github/styles/Microsoft/Terms.yml
similarity index 100%
rename from styles/Microsoft/Terms.yml
rename to .github/styles/Microsoft/Terms.yml
diff --git a/styles/Microsoft/URLFormat.yml b/.github/styles/Microsoft/URLFormat.yml
similarity index 100%
rename from styles/Microsoft/URLFormat.yml
rename to .github/styles/Microsoft/URLFormat.yml
diff --git a/styles/Microsoft/Units.yml b/.github/styles/Microsoft/Units.yml
similarity index 100%
rename from styles/Microsoft/Units.yml
rename to .github/styles/Microsoft/Units.yml
diff --git a/styles/Microsoft/Vocab.yml b/.github/styles/Microsoft/Vocab.yml
similarity index 100%
rename from styles/Microsoft/Vocab.yml
rename to .github/styles/Microsoft/Vocab.yml
diff --git a/styles/Microsoft/We.yml b/.github/styles/Microsoft/We.yml
similarity index 100%
rename from styles/Microsoft/We.yml
rename to .github/styles/Microsoft/We.yml
diff --git a/styles/Microsoft/Wordiness.yml b/.github/styles/Microsoft/Wordiness.yml
similarity index 100%
rename from styles/Microsoft/Wordiness.yml
rename to .github/styles/Microsoft/Wordiness.yml
diff --git a/styles/Microsoft/meta.json b/.github/styles/Microsoft/meta.json
similarity index 100%
rename from styles/Microsoft/meta.json
rename to .github/styles/Microsoft/meta.json
diff --git a/.github/styles/config/vocabularies/default/accept.txt b/.github/styles/config/vocabularies/default/accept.txt
new file mode 100644
index 00000000..06dfe491
--- /dev/null
+++ b/.github/styles/config/vocabularies/default/accept.txt
@@ -0,0 +1,218 @@
+(?i)cra
+(?i)eth
+(?i)http
+(?i)https
+(?i)sdk
+(?i)zkevm
+(?i)zksync
+(?i)wagmi
+[Aa]urora
+[Aa]rbitrum
+[Bb]ackend
+[Bb]inance
+[Bb]lockchain
+[Bb]lockchains
+[Bb]undlers
+[Cc]elo
+[Cc]omposable
+[Cc]onfig
+[Cc]rypto
+[Cc]ryptocurrencies
+[Dd]app
+[Dd]apps
+[Dd]elist
+[Ee]ndhint
+[Ee]rigon
+[Ee]thereum
+[Gg]asless
+[Gg]elato
+[Gg]oerli
+[Gg]nosis
+[Ll]ogics
+[Mm]ainnet
+[Mm]iddleware
+[Mm]ultisig
+[Nn]extra
+[Oo]ffchain
+[Oo]nboarding
+[Oo]nchain
+[Pp]olygon
+[Pp]luggable
+[Rr]eact
+[Rr]eauthenticate
+[Rr]elayer
+[Rr]elayers
+[Ss]epolia
+[Tt]estnet
+[Vv]alidator
+[Ww]hitepaper
+A1
+AA
+ABI
+ABIs
+API
+API Kit
+Acala
+Alfajores
+Andromeda
+Apothem
+Arianee
+Arthera
+Astar
+Auth Kit
+Autobahn
+Avax
+BNB
+Blocknative
+Blockscout
+Boba
+Bobabeam
+C-Chain
+C1
+CORS
+Canto
+Callout
+Cascadia
+Chainlist
+Chiado
+Client Gateway
+CloudWalk
+Crab
+Cronos
+Crossbell
+DAO
+Darwinia
+Devnet
+EIP
+EOA
+EOAs
+ERC
+EURe
+EVM
+EdgeEVM
+Edgeware
+EtherLite
+Etherscan
+Eurus
+Evmos
+Fantom
+Foesenek
+Fuji
+Fuse
+GC
+Godwoken
+Gunicorn
+Haqq
+Holesky
+Horizen
+Hypra
+IPFS
+Infura
+IoTeX
+KCC
+Kanazawa
+Karura
+Kava
+Klaytn
+Kovan
+Kroma
+LUKSO
+Lightlink
+Linea
+Mandala
+Mantle
+Meld
+Metadium
+Metamask
+Metis
+Milkomeda
+Monerium
+Moonbase
+Moonbeam
+Moonriver
+Mordor
+Nova
+OAuth
+OP
+Onramp
+Onramp Kit
+PGN
+Pimlico
+Polis
+Protocol Kit
+PublicMint
+README
+REI
+RPC
+Relay Kit
+Renan
+Rethereum
+Rinkeby
+Rollux
+Rootstock
+Ropsten
+Safe App
+Safe Apps
+Safe Apps SDK
+Safe Client Gateway
+Safe Config Service
+Safe Guards
+Safe Module
+Safe Modules
+Safe Smart Account
+Safe Transaction Service
+Safe{Core} Account Abstraction SDK
+Safe{Core} Protocol
+Safe{DAO}
+Shiden
+ShimmerEVM
+Shyft
+Solaris
+Sourcify
+Souza
+Sparknet
+Stardust
+Supernet
+Syscoin
+TC9
+Tanenbaum
+Telos
+Tenet
+ThunderCore
+Transaction Service
+U2U
+UI Kit
+Ultron
+Velas
+Venidium
+Vite
+Vue
+WEMIX3.0
+WSGI
+WebSocket
+XDC
+YouTube
+ZetaChain
+Zoltu
+Zora
+address_full_match
+auth_code
+boolean
+bytestrings
+checksummed
+eSpace
+execTransaction
+mempool
+monorepo
+multichain
+npm
+onboarding
+onchain
+pluggable
+trace_block
+trace_filter
+trace_transaction
+undefined
+v1
+saltNonce
+messageHash
diff --git a/styles/Vocab/default/reject.txt b/.github/styles/config/vocabularies/default/reject.txt
similarity index 50%
rename from styles/Vocab/default/reject.txt
rename to .github/styles/config/vocabularies/default/reject.txt
index 6efbea0e..b4544e2d 100644
--- a/styles/Vocab/default/reject.txt
+++ b/.github/styles/config/vocabularies/default/reject.txt
@@ -1,2 +1 @@
Github
-github
diff --git a/styles/write-good/Cliches.yml b/.github/styles/write-good/Cliches.yml
similarity index 100%
rename from styles/write-good/Cliches.yml
rename to .github/styles/write-good/Cliches.yml
diff --git a/styles/write-good/E-Prime.yml b/.github/styles/write-good/E-Prime.yml
similarity index 100%
rename from styles/write-good/E-Prime.yml
rename to .github/styles/write-good/E-Prime.yml
diff --git a/styles/write-good/Illusions.yml b/.github/styles/write-good/Illusions.yml
similarity index 100%
rename from styles/write-good/Illusions.yml
rename to .github/styles/write-good/Illusions.yml
diff --git a/styles/write-good/Passive.yml b/.github/styles/write-good/Passive.yml
similarity index 100%
rename from styles/write-good/Passive.yml
rename to .github/styles/write-good/Passive.yml
diff --git a/styles/write-good/README.md b/.github/styles/write-good/README.md
similarity index 100%
rename from styles/write-good/README.md
rename to .github/styles/write-good/README.md
diff --git a/styles/write-good/So.yml b/.github/styles/write-good/So.yml
similarity index 100%
rename from styles/write-good/So.yml
rename to .github/styles/write-good/So.yml
diff --git a/styles/write-good/ThereIs.yml b/.github/styles/write-good/ThereIs.yml
similarity index 100%
rename from styles/write-good/ThereIs.yml
rename to .github/styles/write-good/ThereIs.yml
diff --git a/styles/write-good/TooWordy.yml b/.github/styles/write-good/TooWordy.yml
similarity index 100%
rename from styles/write-good/TooWordy.yml
rename to .github/styles/write-good/TooWordy.yml
diff --git a/styles/write-good/Weasel.yml b/.github/styles/write-good/Weasel.yml
similarity index 100%
rename from styles/write-good/Weasel.yml
rename to .github/styles/write-good/Weasel.yml
diff --git a/styles/write-good/meta.json b/.github/styles/write-good/meta.json
similarity index 100%
rename from styles/write-good/meta.json
rename to .github/styles/write-good/meta.json
diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml
new file mode 100644
index 00000000..a7f99e5c
--- /dev/null
+++ b/.github/workflows/deploy-release.yml
@@ -0,0 +1,52 @@
+name: Release
+
+on:
+ release:
+ types: [published]
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions: write-all
+
+ name: Deploy release
+
+ steps:
+ - name: Cancel previous runs
+ uses: styfle/cancel-workflow-action@0.8.0
+ with:
+ access_token: ${{ github.token }}
+
+ - uses: actions/checkout@v3
+
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+
+ - name: Install dependencies
+ shell: bash
+ run: pnpm install --frozen-lockfile
+
+ - name: Build app
+ shell: bash
+ run: pnpm build
+
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v3
+ with:
+ role-to-assume: ${{ secrets.AWS_ROLE }}
+ aws-region: ${{ secrets.AWS_REGION }}
+
+ # Deploy the main branch to production environment
+ - name: Deploy to the production S3
+ if: github.ref == 'refs/heads/main'
+ env:
+ BUCKET: s3://${{ secrets.AWS_STAGING_BUCKET_NAME }}/releases/${{ github.event.release.tag_name }}
+ run: bash ./.github/scripts/s3_upload.sh
+
+ # Script to prepare production deployments
+ - run: bash ./.github/scripts/prepare_production_deployment.sh
+ env:
+ PROD_DEPLOYMENT_HOOK_TOKEN: ${{ secrets.PROD_DEPLOYMENT_HOOK_TOKEN }}
+ PROD_DEPLOYMENT_HOOK_URL: ${{ secrets.PROD_DEPLOYMENT_HOOK_URL }}
+ VERSION_TAG: ${{ github.event.release.tag_name }}
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 00000000..bc91f080
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,46 @@
+name: Deploy to staging
+
+on:
+ push:
+ branches:
+ - development
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions: write-all
+
+ name: Deploy to staging
+
+ steps:
+ - name: Cancel previous runs
+ uses: styfle/cancel-workflow-action@0.8.0
+ with:
+ access_token: ${{ github.token }}
+
+ - uses: actions/checkout@v3
+
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+
+ - name: Install dependencies
+ shell: bash
+ run: pnpm install --frozen-lockfile
+
+ - name: Build app
+ shell: bash
+ run: pnpm build
+
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v3
+ with:
+ role-to-assume: ${{ secrets.AWS_ROLE }}
+ aws-region: ${{ secrets.AWS_REGION }}
+
+ # Deploy the development branch to staging
+ - name: Deploy to the staging S3
+ if: github.ref == 'refs/heads/development'
+ env:
+ BUCKET: s3://${{ secrets.AWS_STAGING_BUCKET_NAME }}/current
+ run: bash ./.github/scripts/s3_upload.sh
diff --git a/.github/workflows/generate-supported-networks.yml b/.github/workflows/generate-supported-networks.yml
new file mode 100644
index 00000000..d4fcb9a8
--- /dev/null
+++ b/.github/workflows/generate-supported-networks.yml
@@ -0,0 +1,25 @@
+name: Weekly update for supported networks
+
+on:
+ schedule:
+ - cron: "0 9 * * 1"
+ workflow_dispatch:
+
+jobs:
+ generate-supported-networks:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Use Node.js 20.x
+ uses: actions/setup-node@v2
+ with:
+ node-version: '20.x'
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ - name: Install dependencies
+ run: pnpm install
+ - name: Generate supported networks
+ run: pnpm generate-supported-networks
+ - uses: actions/checkout@v4
+ - name: Create Pull Request
+ uses: peter-evans/create-pull-request@v5
diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml
new file mode 100644
index 00000000..09e3efb9
--- /dev/null
+++ b/.github/workflows/link-check.yml
@@ -0,0 +1,19 @@
+name: Link check for PRs
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ markdown-link-check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: gaurav-nelson/github-action-markdown-link-check@v1
+ with:
+ use-quiet-mode: 'yes'
+ use-verbose-mode: 'yes'
+ folder-path: './'
+ base-branch: 'main'
+ check-modified-files-only: 'yes'
diff --git a/.github/workflows/report-readability.yml b/.github/workflows/report-readability.yml
new file mode 100644
index 00000000..32d84a68
--- /dev/null
+++ b/.github/workflows/report-readability.yml
@@ -0,0 +1,17 @@
+name: Report readability
+
+on: pull_request
+
+jobs:
+ report-readability:
+ name: Report readability
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repo with history
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: Rebilly/lexi@v2
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ glob: '**/*.md'
diff --git a/.github/workflows/style-check.yml b/.github/workflows/style-check.yml
new file mode 100644
index 00000000..6541d5f5
--- /dev/null
+++ b/.github/workflows/style-check.yml
@@ -0,0 +1,17 @@
+name: Style check
+on: pull_request
+
+jobs:
+ vale-docs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Vale Linter
+ uses: errata-ai/vale-action@reviewdog
+ with:
+ vale_flags: "--glob=*.md --minAlertLevel=error"
+ fail_on_error: true
diff --git a/.github/workflows/weekly-link-check.yml b/.github/workflows/weekly-link-check.yml
new file mode 100644
index 00000000..e3fbb8c7
--- /dev/null
+++ b/.github/workflows/weekly-link-check.yml
@@ -0,0 +1,28 @@
+name: Weekly link check
+
+on:
+ schedule:
+ - cron: "0 9 * * 1"
+ workflow_dispatch:
+
+jobs:
+ markdown-link-check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: gaurav-nelson/github-action-markdown-link-check@v1
+ with:
+ use-quiet-mode: 'yes'
+ use-verbose-mode: 'yes'
+ folder-path: './'
+ base-branch: 'main'
+ - name: Create Issue
+ if: ${{ failure() }}
+ uses: dacbd/create-issue-action@main
+ with:
+ token: ${{ github.token }}
+ title: Link Checker Report
+ labels: report, automated issue
+ body: |
+ Broken links found: [Failed Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
+ Workflow: `${{ github.workflow }}`
diff --git a/.gitignore b/.gitignore
index e43b0f98..f0b4c3c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,8 @@
.DS_Store
+node_modules/
+out/
+dist/
+.next
+.eslintcache
+.env
+tsconfig.tsbuildinfo
\ No newline at end of file
diff --git a/.husky/pre-push b/.husky/pre-push
new file mode 100755
index 00000000..42b62e5e
--- /dev/null
+++ b/.husky/pre-push
@@ -0,0 +1,4 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+npm run prepush
diff --git a/.vale.ini b/.vale.ini
index 2bb3c5cf..73318776 100644
--- a/.vale.ini
+++ b/.vale.ini
@@ -1,8 +1,10 @@
-StylesPath = styles
+StylesPath = .github/styles
MinAlertLevel = suggestion
Vocab = default
Packages = Microsoft, write-good
-[*]
-BasedOnStyles = Vale, Microsoft, write-good
+[formats]
+mdx = md
+[*.{md,mdx}]
+BasedOnStyles = Vale, Microsoft, write-good
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 00000000..db692225
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,8 @@
+{
+ "recommendations": [
+ "numso.prettier-standard-vscode",
+ "chrischinchilla.vale-vscode",
+ "unifiedjs.vscode-mdx",
+ "znck.grammarly"
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..1ae0f5b6
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "grammarly.files.include": ["**/*.md", "**/*.mdx"],
+ "vale.valeCLI.config": "${workspaceFolder}/.vale.ini"
+}
\ No newline at end of file
diff --git a/LICENSE b/LICENSE.md
similarity index 100%
rename from LICENSE
rename to LICENSE.md
diff --git a/README.md b/README.md
index 277382cd..38aa412c 100644
--- a/README.md
+++ b/README.md
@@ -1,35 +1,80 @@
----
-description: Everything you need to know to start building on Safe.
----
+# Safe Documentation
-# Safe
+[](https://github.com/safe-global/safe-docs/blob/main/LICENSE.md)
+
-[Safe](https://safe.global) brings digital ownership of accounts to everyone by building universal and open contract standards for the custody of digital assets, data, and identity.
+This repository hosts [Safe](https://safe.global) documentation.
-Safe is at the forefront of modular smart account infrastructure, paving the way for developers to create various applications and wallets.
+The documentation is built with [Nextra](https://nextra.site) and is live at [docs.safe.global](https://docs.safe.global).
-Safe{Core} consists of three components:
+## Installation
-
+Install the dependencies using [pnpm](https://pnpm.io):
-## Safe{Core} Protocol
+```
+pnpm install
+```
-The [Safe{Core} Protocol](safe-core-protocol/README.md) is an open, modular framework to make smart accounts secure, portable, and composable.
+## Development
-This section in the documentation has information and relevant links about the Safe{Core} Protocol and the different elements involved.
+Git hooks are set up to run tests and linting checks before every `git push`. These hooks can be executed locally by running the following command:
-## Safe{Core} AA SDK
+```
+pnpm prepush
+```
-The [Safe{Core} Account Abstraction SDK](safe-core-sdk/README.md) is a set of developer kits that help integrate Safe with different external service providers. The SDK offers developers the ability to abstract the complexity that comes with operating a smart contract account.
+All links in the documentation are checked for validity on every pull request. These checks can be executed locally by running the following command:
-This section in the documentation has relevant information and tutorials on the SDK kits and how to integrate them.
+```
+pnpm linkcheck
+```
-## Safe{Core} API
+## Execution
-The [Safe{Core} API](safe-core-api/available-services.md) makes reference to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc.
+The project can be run with a server that's executed in development and production mode.
-This section in the documentation has information related to the services architecture.
+### Development mode
-## Reference
+Run the server in development mode using the following command:
-The [Reference](reference/safe-core-sdk/auth-kit/README.md) section in this documentation has technical details describing the different tools available at Safe in detail.
+```
+pnpm dev
+```
+
+### Production mode
+
+Build the project:
+
+```
+pnpm build
+```
+
+Run the server in production mode using the following command:
+
+```
+pnpm start
+```
+
+## Testing
+
+Create an environment file in the root of the project and copy the content from the `.env.example` file using the following command:
+
+```
+cp .env.example .env
+```
+
+Remember to update the environment variables once the `.env` file is created.
+
+Run the tests using the following command:
+
+```
+pnpm test
+```
+
+## License
+
+This project is licensed under the [MIT License](./LICENSE.md).
+
+## Contributing
+
+Contributions are more than welcome! Please open an issue or create a pull request by following our [contributions guidelines](./CONTRIBUTING.md).
diff --git a/SUMMARY.md b/SUMMARY.md
deleted file mode 100644
index 06f61f72..00000000
--- a/SUMMARY.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Table of contents
-
-
-
-## Getting started
-
-* [What is Safe?](README.md)
-
-## Safe Smart Account
-
-* [Overview](safe-smart-account/README.md)
-
-* [Safe Modules](safe-smart-account/modules.md)
-
-* [Safe Guards](safe-smart-account/guards.md)
-
-* [Security](safe-smart-account/security/README.md)
- * [Bug Bounty](safe-smart-account/security/bug-bounty-program.md)
- * [Audits](safe-smart-account/security/security-audits.md)
-
-* [Signatures](safe-smart-account/signatures/README.md)
- * [EIP-1271 Off-Chain signatures](safe-smart-account/signatures/eip-1271.md)
-
-## Safe{Core} Protocol
-
-* [Overview](safe-core-protocol/README.md)
-
-## Safe{Core} AA SDK
-
-* [Overview](safe-core-sdk/README.md)
-
-* [Auth Kit](safe-core-sdk/auth-kit/README.md)
- * [Web3Auth](safe-core-sdk/auth-kit/web3auth.md)
-
-* [Protocol Kit](safe-core-sdk/protocol-kit/README.md)
-
-* [OnRamp Kit](safe-core-sdk/onramp-kit/README.md)
- * [Stripe](safe-core-sdk/onramp-kit/stripe.md)
- * [Monerium](safe-core-sdk/onramp-kit/monerium.md)
-
-* [Relay Kit](safe-core-sdk/relay-kit/README.md)
- * [Gelato Relay](safe-core-sdk/relay-kit/gelato.md)
-
-* [API Kit](safe-core-sdk/api-kit/README.md)
-
-* [Safe Apps SDK](safe-core-sdk/safe-apps/README.md)
- * [Overview](safe-core-sdk/safe-apps/overview.md)
- * [Get started](safe-core-sdk/safe-apps/get-started.md)
- * [Release](safe-core-sdk/safe-apps/release.md)
- * [Safe App example](safe-core-sdk/safe-apps/example-safe-app.md)
-
-## Safe{Core} API
-
-* [Available Services](safe-core-api/available-services.md)
-
-* [Service Architecture](safe-core-api/service-architecture.md)
-
-* [RPC Requirements](safe-core-api/rpc-requirements.md)
-
-## Reference
-
-* [Auth Kit](reference/safe-core-sdk/auth-kit/README.md)
- * [AuthKitBasePack](reference/safe-core-sdk/auth-kit/AuthKitBasePack.md)
- * [Web3AuthModalPack](reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md)
-
-* [Protocol Kit](reference/safe-core-sdk/protocol-kit/README.md)
-
-* [OnRamp Kit](reference/safe-core-sdk/onramp-kit/README.md)
- * [OnRampKitBasePack](reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md)
- * [StripePack](reference/safe-core-sdk/onramp-kit/StripePack.md)
- * [MoneriumPack](reference/safe-core-sdk/onramp-kit/MoneriumPack.md)
-
-* [API Kit](reference/safe-core-sdk/api-kit/README.md)
-
-***
-
-* [Contact us](contact-us.md)
diff --git a/.gitbook/assets/add-custom-app.png b/assets/add-custom-app.png
similarity index 100%
rename from .gitbook/assets/add-custom-app.png
rename to assets/add-custom-app.png
diff --git a/.gitbook/assets/core-brands.png b/assets/core-brands.png
similarity index 100%
rename from .gitbook/assets/core-brands.png
rename to assets/core-brands.png
diff --git a/.gitbook/assets/diagram-safe-apps.png b/assets/diagram-safe-apps.png
similarity index 100%
rename from .gitbook/assets/diagram-safe-apps.png
rename to assets/diagram-safe-apps.png
diff --git a/.gitbook/assets/diagram-safe-core-protocol.png b/assets/diagram-safe-core-protocol.png
similarity index 100%
rename from .gitbook/assets/diagram-safe-core-protocol.png
rename to assets/diagram-safe-core-protocol.png
diff --git a/.gitbook/assets/diagram-safe-core-sdk.png b/assets/diagram-safe-core-sdk.png
similarity index 100%
rename from .gitbook/assets/diagram-safe-core-sdk.png
rename to assets/diagram-safe-core-sdk.png
diff --git a/.gitbook/assets/diagram-safe-guards.png b/assets/diagram-safe-guards.png
similarity index 100%
rename from .gitbook/assets/diagram-safe-guards.png
rename to assets/diagram-safe-guards.png
diff --git a/.gitbook/assets/diagram-safe-modules.png b/assets/diagram-safe-modules.png
similarity index 100%
rename from .gitbook/assets/diagram-safe-modules.png
rename to assets/diagram-safe-modules.png
diff --git a/.gitbook/assets/diagram-services-requests.png b/assets/diagram-services-requests.png
similarity index 100%
rename from .gitbook/assets/diagram-services-requests.png
rename to assets/diagram-services-requests.png
diff --git a/.gitbook/assets/diagram-services.png b/assets/diagram-services.png
similarity index 100%
rename from .gitbook/assets/diagram-services.png
rename to assets/diagram-services.png
diff --git a/.gitbook/assets/side-bar-menu.png b/assets/side-bar-menu.png
similarity index 100%
rename from .gitbook/assets/side-bar-menu.png
rename to assets/side-bar-menu.png
diff --git a/assets/svg/arrow-back.svg b/assets/svg/arrow-back.svg
new file mode 100644
index 00000000..f78d5a67
--- /dev/null
+++ b/assets/svg/arrow-back.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/chevron-down.svg b/assets/svg/chevron-down.svg
new file mode 100644
index 00000000..c2115090
--- /dev/null
+++ b/assets/svg/chevron-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/close.svg b/assets/svg/close.svg
new file mode 100644
index 00000000..de90750a
--- /dev/null
+++ b/assets/svg/close.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/svg/cross.svg b/assets/svg/cross.svg
new file mode 100644
index 00000000..8bc89962
--- /dev/null
+++ b/assets/svg/cross.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/discord-icon.svg b/assets/svg/discord-icon.svg
new file mode 100644
index 00000000..d78504a8
--- /dev/null
+++ b/assets/svg/discord-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/discourse-icon.svg b/assets/svg/discourse-icon.svg
new file mode 100644
index 00000000..d4c0484a
--- /dev/null
+++ b/assets/svg/discourse-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/feedback-bad.svg b/assets/svg/feedback-bad.svg
new file mode 100644
index 00000000..17c6dcdc
--- /dev/null
+++ b/assets/svg/feedback-bad.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/svg/feedback-good.svg b/assets/svg/feedback-good.svg
new file mode 100644
index 00000000..880070d6
--- /dev/null
+++ b/assets/svg/feedback-good.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/svg/feedback-ok.svg b/assets/svg/feedback-ok.svg
new file mode 100644
index 00000000..a26f41c1
--- /dev/null
+++ b/assets/svg/feedback-ok.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/svg/filter.svg b/assets/svg/filter.svg
new file mode 100644
index 00000000..281a4317
--- /dev/null
+++ b/assets/svg/filter.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/github-icon.svg b/assets/svg/github-icon.svg
new file mode 100644
index 00000000..b01d2ca4
--- /dev/null
+++ b/assets/svg/github-icon.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/svg/mirror-icon.svg b/assets/svg/mirror-icon.svg
new file mode 100644
index 00000000..be495ed2
--- /dev/null
+++ b/assets/svg/mirror-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/safe-logo-white.svg b/assets/svg/safe-logo-white.svg
new file mode 100644
index 00000000..f60bac59
--- /dev/null
+++ b/assets/svg/safe-logo-white.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/assets/svg/safe-logo.svg b/assets/svg/safe-logo.svg
new file mode 100644
index 00000000..c06c469d
--- /dev/null
+++ b/assets/svg/safe-logo.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/assets/svg/search.svg b/assets/svg/search.svg
new file mode 100644
index 00000000..81e4c9a2
--- /dev/null
+++ b/assets/svg/search.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/x-icon.svg b/assets/svg/x-icon.svg
new file mode 100644
index 00000000..b5700350
--- /dev/null
+++ b/assets/svg/x-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/youtube-icon.svg b/assets/svg/youtube-icon.svg
new file mode 100644
index 00000000..3a1dc4bf
--- /dev/null
+++ b/assets/svg/youtube-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/.gitbook/assets/transaction_service_architecture.png b/assets/transaction_service_architecture.png
similarity index 100%
rename from .gitbook/assets/transaction_service_architecture.png
rename to assets/transaction_service_architecture.png
diff --git a/safe-smart-account/security/README.md b/components/Feedback/Feedback.module.css
similarity index 100%
rename from safe-smart-account/security/README.md
rename to components/Feedback/Feedback.module.css
diff --git a/components/Feedback/index.tsx b/components/Feedback/index.tsx
new file mode 100644
index 00000000..d06287ec
--- /dev/null
+++ b/components/Feedback/index.tsx
@@ -0,0 +1,77 @@
+// import { signal } from '@preact/signals'
+import Typography from '@mui/material/Typography'
+import Button from '@mui/material/Button'
+import Tooltip from '@mui/material/Tooltip'
+import Grid from '@mui/material/Grid'
+
+import FeedbackBad from '../../assets/svg/feedback-bad.svg'
+import FeedbackOk from '../../assets/svg/feedback-ok.svg'
+import FeedbackGood from '../../assets/svg/feedback-good.svg'
+
+// const feedbackState = signal(JSON.parse(window.localStorage.getItem('feedback') ?? '{}'))
+
+const Feedback: React.FC = () => (
+
+
+
+ Was this page helpful?
+
+
+ {feedbackButtons.map(button => (
+
+ ))}
+
+
+
+)
+
+export default Feedback
+
+const feedbackButtons = [
+ {
+ title: 'Poor content',
+ background: '#ff918f',
+ Icon:
+ },
+ {
+ title: 'OK content',
+ background: '#b95e04',
+ Icon:
+ },
+ {
+ title: 'Good content',
+ background: '#008847',
+ Icon:
+ }
+]
+
+const FeedbackButton: React.FC<{
+ title: string
+ background: string
+ Icon: JSX.Element
+}> = ({ title, background, Icon }) => (
+
+
+
+)
diff --git a/components/Footer/Footer.module.css b/components/Footer/Footer.module.css
new file mode 100644
index 00000000..94ecf948
--- /dev/null
+++ b/components/Footer/Footer.module.css
@@ -0,0 +1,67 @@
+.wrapper {
+ margin-top: 80px;
+ }
+
+ .list {
+ padding: 0;
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .listItem {
+ font-size: 16px;
+ line-height: 20px;
+ color: var(--mui-palette-primary-light);
+ }
+
+ .listItem a,
+ .subListItem a {
+ display: block;
+ }
+
+ .listItem:hover a,
+ .subListItem:hover a {
+ color: white;
+ }
+
+ .subList {
+ list-style: none;
+ padding: 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 16px;
+ }
+
+ .subListItem {
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--mui-palette-primary-light);
+ }
+
+ .socials {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 24px;
+ }
+
+ .socials svg {
+ width: 28px;
+ height: 28px;
+ }
+
+ .logo {
+ width: 150px;
+ height: auto;
+ }
+
+ @media (min-width: 600px) {
+ .subList {
+ gap: 32px;
+ }
+
+ .subListItem {
+ line-height: 56px;
+ }
+ }
\ No newline at end of file
diff --git a/components/Footer/index.tsx b/components/Footer/index.tsx
new file mode 100644
index 00000000..57217a41
--- /dev/null
+++ b/components/Footer/index.tsx
@@ -0,0 +1,293 @@
+import { ButtonBase, Container, Divider, Grid, Typography } from '@mui/material'
+import Link from 'next/link'
+import type { ComponentType, SyntheticEvent } from 'react'
+import DiscordIcon from '../../assets/svg/discord-icon.svg'
+import DiscourseIcon from '../../assets/svg/discourse-icon.svg'
+import GithubIcon from '../../assets/svg/github-icon.svg'
+import MirrorIcon from '../../assets/svg/mirror-icon.svg'
+import Logo from '../../assets/svg/safe-logo-white.svg'
+import XIcon from '../../assets/svg/x-icon.svg'
+import YoutubeIcon from '../../assets/svg/youtube-icon.svg'
+import css from './Footer.module.css'
+
+const SAFE_LINK = 'https://safe.global'
+
+// Safe
+const CORE_LINK = 'https://core.safe.global'
+
+// Community
+const GOVERNANCE_LINK = 'https://safe.global/governance' // Do not use: https://governance.safe.global
+const ECOSYSTEM_LINK = 'https://ecosystem.safe.global'
+const GRANTS_LINK = 'https://grants.safe.global'
+const SAFECON_LINK = 'https://conf.safe.global'
+const DUNE_LINK = 'https://dune.com/safe'
+
+// Resources
+const HELP_LINK = 'https://help.safe.global'
+const CAREERS_LINK = 'https://safe.global/careers'
+const BRAND_LINK = 'https://press.safe.global'
+const STACKEXCHANGE_LINK = 'https://ethereum.stackexchange.com/questions/tagged/safe-core'
+const EXPERIMENTAL_LINK = 'https://github.com/5afe'
+
+// Sub-Footer
+const TERMS_LINK = 'https://safe.global/terms'
+const PRIVACY_LINK = 'https://safe.global/privacy'
+const LICENSES_LINK = 'https://app.safe.global/licenses'
+const COOKIE_LINK = 'https://safe.global/cookie'
+const COOKIE_PREFERENCES_LINK = '#cookies'
+const IMPRINT_LINK = 'https://safe.global/imprint'
+
+// Socials
+const X_LINK = 'https://x.com/safe'
+const FORUM_LINK = 'https://forum.safe.global'
+const DISCORD_LINK = 'https://chat.safe.global'
+const YOUTUBE_LINK = 'https://www.youtube.com/@safeglobal'
+const MIRROR_LINK = 'https://safe.mirror.xyz'
+const GITHUB_LINK = 'https://github.com/safe-global'
+
+interface FooterLink {
+ label: string
+ href: string
+ target: string
+ rel: string
+}
+
+const safeItems: FooterLink[] = [
+ {
+ label: 'Safe{Core}',
+ href: CORE_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ }
+]
+
+const communityItems: FooterLink[] = [
+ {
+ label: 'Governance',
+ href: GOVERNANCE_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Ecosystem',
+ href: ECOSYSTEM_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Grants',
+ href: GRANTS_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Safe{Con}',
+ href: SAFECON_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Safe Analytics',
+ href: DUNE_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ }
+]
+
+const resourcesItems: FooterLink[] = [
+ {
+ label: 'Help Center',
+ href: HELP_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Careers',
+ href: CAREERS_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Brand Kit',
+ href: BRAND_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Developer Support',
+ href: STACKEXCHANGE_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Experimental Tools',
+ href: EXPERIMENTAL_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ }
+
+]
+
+const subFooterItems: FooterLink[] = [
+ {
+ label: 'Terms',
+ href: TERMS_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Privacy',
+ href: PRIVACY_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Licenses',
+ href: LICENSES_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Cookie Policy',
+ href: COOKIE_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Preferences',
+ href: COOKIE_PREFERENCES_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ },
+ {
+ label: 'Imprint',
+ href: IMPRINT_LINK,
+ target: '_blank',
+ rel: 'noreferrer'
+ }
+]
+
+const LinksColumn: React.FC<{ title: string, items: FooterLink[] }> = ({
+ title,
+ items
+}) => (
+
+
+ {title}
+
+
+ {items.map(item => (
+ -
+
+ {item.label}
+
+
+ ))}
+
+
+)
+
+const Socials: React.FC = () => (
+
+
+ {createFooterButton('X page', X_LINK, XIcon as React.FC)}
+ {createFooterButton(
+ 'Discourse forum',
+ FORUM_LINK,
+ DiscourseIcon as React.FC
+ )}
+ {createFooterButton(
+ 'Discord server',
+ DISCORD_LINK,
+ DiscordIcon as React.FC
+ )}
+ {createFooterButton(
+ 'Youtube channel',
+ YOUTUBE_LINK,
+ YoutubeIcon as React.FC
+ )}
+ {createFooterButton('Mirror blog', MIRROR_LINK, MirrorIcon as React.FC)}
+ {createFooterButton(
+ 'Github organization',
+ GITHUB_LINK,
+ GithubIcon as React.FC
+ )}
+
+
+)
+
+const SubFooter: React.FC = () => {
+ // const { openBanner } = useCookieBannerContext()
+
+ const showBanner = (e: SyntheticEvent): void => {
+ // Prevent opening the hash link
+ e.preventDefault()
+ // openBanner()
+ }
+
+ return (
+
+
+
+ {subFooterItems.map(item => {
+ const isCookiePreferencesLink = false // item.href === COOKIE_PREFERENCES_LINK
+ return (
+ -
+
+ {item.label}
+
+
+ )
+ })}
+
+
+
+
+ ©{new Date().getFullYear()} Safe Ecosystem Foundation
+
+
+
+ )
+}
+
+const createFooterButton = (
+ label: string,
+ href: string,
+ IconComponent: ComponentType
+): JSX.Element => {
+ const buttonBaseAttributes = {
+ disableRipple: true,
+ target: '_blank',
+ rel: 'noreferrer'
+ }
+ return (
+
+
+
+ )
+}
+
+const Footer: React.FC = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)
+
+export default Footer
diff --git a/components/ResourceHub/Card.tsx b/components/ResourceHub/Card.tsx
new file mode 100644
index 00000000..a8f024a3
--- /dev/null
+++ b/components/ResourceHub/Card.tsx
@@ -0,0 +1,80 @@
+import { Typography, Chip, Box } from '@mui/material'
+
+import css from './styles.module.css'
+// import { ECOSYSTEM_DATA_URL } from '@/config/constants'
+import { type KnowledgeResource } from './Resources'
+import YouTubeEmbed from '../YouTube'
+// import clsx from 'clsx'
+
+export const ProjectCard = (resource: KnowledgeResource): JSX.Element => {
+ const CardContent = (
+
+ {resource.type === 'Video' && (
+
+ )}
+
+
+ {resource.name}
+
+
+ {resource.type === 'Blog post' && (
+
+ {resource.abstract}
+
+ )}
+
+
+
+ {resource.tags.map(tag => (
+
+ ))}
+
+
+ )
+
+ return (
+
+
+ {CardContent}
+
+
+ )
+}
diff --git a/components/ResourceHub/Resources.tsx b/components/ResourceHub/Resources.tsx
new file mode 100644
index 00000000..c831ce75
--- /dev/null
+++ b/components/ResourceHub/Resources.tsx
@@ -0,0 +1,497 @@
+import {
+ Divider,
+ Grid,
+ Typography,
+ Chip,
+ TextField,
+ InputAdornment,
+ Button,
+ Dialog,
+ AppBar,
+ Toolbar,
+ IconButton,
+ Box,
+ Link,
+ Container
+} from '@mui/material'
+import type { Dispatch, ReactElement, SetStateAction } from 'react'
+import type { GridProps } from '@mui/material'
+import { Fragment, useMemo, useState } from 'react'
+import { useRouter } from 'next/router'
+import NextLink from 'next/link'
+import type { NextRouter } from 'next/router'
+
+import SearchIcon from '../../assets/svg/search.svg'
+import CrossIcon from '../../assets/svg/cross.svg'
+import CloseIcon from '../../assets/svg/close.svg'
+import FilterIcon from '../../assets/svg/filter.svg'
+import ArrowBackIcon from '../../assets/svg/arrow-back.svg'
+import { useResourceSearch } from './useResourceSearch'
+import { SidebarAccordion } from './SidebarAccordion'
+import { ProjectCard } from './Card'
+import companyResources from './company-resources.json'
+import communityResources from './community-resources.json'
+import css from './styles.module.css'
+
+const resources = [
+ ...communityResources.map(r => ({ ...r, origin: 'Community' })),
+ ...companyResources.map(r => ({ ...r, origin: 'Safe Team' }))
+]
+
+export interface KnowledgeResource {
+ url: string
+ name: string
+ type: string
+ origin: string
+ abstract?: string
+ tags: string[]
+}
+
+const getUniqueStrings = (entries: string[]): string[] => {
+ const uniqueEntries = new Set(entries)
+ return Array.from(uniqueEntries).sort()
+}
+
+const isMatch = (all: string[], selected: string[]): boolean => {
+ // No selection means no filter applied
+ if (selected.length === 0) {
+ return true
+ }
+
+ return selected.some(item => {
+ return all.includes(item)
+ })
+}
+
+const isStrictMatch = (all: string[], selected: string[]): boolean => {
+ // No selection means no filter applied
+ if (selected.length === 0) {
+ return true
+ }
+
+ return selected.every(item => {
+ return all.includes(item)
+ })
+}
+
+export const _getFilteredResources = ({
+ resources,
+ selectedTypes,
+ selectedSources,
+ selectedTags
+}: {
+ resources: KnowledgeResource[]
+ selectedTypes: string[]
+ selectedSources: string[]
+ selectedTags: string[]
+}): KnowledgeResource[] =>
+ resources.filter(
+ resource =>
+ isMatch([resource.type], selectedTypes) &&
+ isMatch([resource.origin], selectedSources) &&
+ isStrictMatch(resource.tags, selectedTags)
+ )
+
+const SpecificTypeFilter = ({
+ category,
+ onClick
+}: {
+ category: KnowledgeResource['type']
+ onClick: (category: KnowledgeResource['type']) => void
+}): JSX.Element => {
+ return (
+
+ )
+}
+
+const EMPTY_FILTER: string[] = []
+
+const GRID_SPACING: GridProps['spacing'] = {
+ xs: 2,
+ md: '30px'
+}
+
+const PAGE_LENGTH = 12
+
+const PAGE_QUERY_PARAM = 'page'
+
+const getPage = (query: NextRouter['query']): number => {
+ const page = Array.isArray(query[PAGE_QUERY_PARAM])
+ ? query[PAGE_QUERY_PARAM][0]
+ : query[PAGE_QUERY_PARAM]
+
+ return parseInt(page ?? '1')
+}
+
+export const Resources = (): ReactElement => {
+ const [query, setQuery] = useState('')
+ const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false)
+
+ const [selectedTypes, setSelectedTypes] = useState(EMPTY_FILTER)
+ const [selectedSources, setSelectedSources] = useState(EMPTY_FILTER)
+ const [selectedTags, setSelectedTags] = useState(EMPTY_FILTER)
+
+ const router = useRouter()
+ const page = getPage(router.query)
+
+ // Types
+ const allTypes = resources.flatMap(resource => resource.type)
+ const uniqueTypes = getUniqueStrings(allTypes)
+
+ // Sources
+ const allSources = resources.flatMap(resource => resource.origin)
+ const uniqueSources = getUniqueStrings(allSources)
+
+ // Tags
+ const allTags = resources.flatMap(resource => resource.tags)
+ const uniqueTags = getUniqueStrings(allTags)
+
+ const onResetSearch = (): void => {
+ setQuery('')
+ }
+
+ const onResetFilters = (): void => {
+ setSelectedTypes(EMPTY_FILTER)
+ setSelectedSources(EMPTY_FILTER)
+ setSelectedTags(EMPTY_FILTER)
+ }
+
+ const onSelect =
+ (setState: Dispatch>) =>
+ (property: string, checked: boolean) => {
+ setState(prev => {
+ if (checked) {
+ return prev.concat(property)
+ } else {
+ return prev.filter(item => item !== property)
+ }
+ })
+ }
+
+ const onSelectType = onSelect(setSelectedTypes)
+ const onSelectSource = onSelect(setSelectedSources)
+ const onSelectTag = onSelect(setSelectedTags)
+
+ const toggleSpecificTag = (tag: string): void => {
+ onSelectTag(tag, !selectedTags.includes(tag))
+ }
+
+ const noFilters = useMemo(() => {
+ return (
+ selectedTypes.length === 0 &&
+ selectedSources.length === 0 &&
+ selectedTags.length === 0
+ )
+ }, [selectedTypes, selectedSources, selectedTags])
+
+ // Type filtered results
+ const filteredResources = useMemo(() => {
+ if (noFilters) {
+ return resources
+ }
+
+ return _getFilteredResources({
+ resources,
+ selectedTypes,
+ selectedSources,
+ selectedTags
+ })
+ }, [noFilters, selectedTypes, selectedSources, selectedTags])
+
+ // Search results
+ const searchResults = useResourceSearch(filteredResources, query)
+
+ // Paginated filtered/search-based results
+ const visibleResults = searchResults.slice(0, PAGE_LENGTH * page)
+
+ const shouldShowMoreButton = visibleResults.length < searchResults.length
+
+ const sidebar = (
+ <>
+
+
+
+
+
+ >
+ )
+
+ return (
+
+
+
+
+ Resource Hub
+
+
+
+
+ ),
+ endAdornment:
+ query.length !== 0 ? (
+
+
+
+
+
+ ) : undefined
+ }}
+ value={query}
+ sx={{ border: 'none', width: '80%' }}
+ onChange={e => {
+ setQuery(e.target.value)
+ }}
+ fullWidth
+ />
+
+
+ Example:
+ {' '}
+ {uniqueTags.slice(0, 3).map((primaryTag, idx, { length }) => {
+ return (
+
+
+ {idx !== length - 1 && ', '}
+
+ )
+ })}
+
+
+
+
+
+
+
+ {searchResults.length}{' '}
+
+ result{searchResults.length === 1 ? '' : 's'}
+
+
+ {!noFilters && (
+
+ Reset all
+
+ )}
+
+
+
+
+ {selectedTypes.map(category => (
+ {
+ onSelectType(category, false)
+ }}
+ sx={{
+ borderRadius: '4px',
+ height: '23px',
+ fontSize: '14px',
+ cursor: 'pointer'
+ }}
+ deleteIcon={}
+ />
+ ))}
+
+ {selectedSources.map(integration => (
+ {
+ onSelectSource(integration, false)
+ }}
+ deleteIcon={}
+ sx={{
+ borderRadius: '4px',
+ height: '23px',
+ fontSize: '14px',
+ cursor: 'pointer'
+ }}
+ />
+ ))}
+
+ {selectedTags.map(tag => (
+ {
+ onSelectTag(tag, false)
+ }}
+ deleteIcon={}
+ sx={{
+ borderRadius: '4px',
+ height: '23px',
+ fontSize: '14px',
+ cursor: 'pointer'
+ }}
+ />
+ ))}
+
+
+
+ {sidebar}
+
+
+
+ {visibleResults.length > 0 ? (
+
+ {visibleResults.map((resource, idx) => (
+
+
+
+ ))}
+ {shouldShowMoreButton && (
+
+
+
+
+
+ )}
+
+
+ Listings are not endorsements and are only for informational
+ purposes.
+
+
+
+ ) : (
+
+
+
+ No results found for {query ?? 'selected filters'}
+
+
+ Try searching something else
+
+
+ )}
+
+
+
+
+
+ )
+}
+
+export default Resources
diff --git a/components/ResourceHub/SidebarAccordion.tsx b/components/ResourceHub/SidebarAccordion.tsx
new file mode 100644
index 00000000..7946aa57
--- /dev/null
+++ b/components/ResourceHub/SidebarAccordion.tsx
@@ -0,0 +1,62 @@
+import {
+ Typography,
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Checkbox,
+ List,
+ ListItem,
+ FormControlLabel
+} from '@mui/material'
+
+import ChevronDownIcon from '../../assets/svg/chevron-down.svg'
+
+import css from './styles.module.css'
+import React from 'react'
+
+export const SidebarAccordion: React.FC<{
+ title: string
+ items: string[]
+ selectedItems: string[]
+ onChange: (item: string, checked: boolean) => void
+}> = ({ title, items, selectedItems, onChange }) => {
+ return (
+
+ }>
+
+ {title}
+
+
+
+
+
+ {items.map(item => (
+
+ {
+ onChange(item, checked)
+ }}
+ checked={selectedItems.includes(item)}
+ edge='end'
+ />
+ }
+ componentsProps={{ typography: { variant: 'body2' } }}
+ className={css.label}
+ />
+
+ ))}
+
+
+
+ )
+}
diff --git a/components/ResourceHub/community-resources.json b/components/ResourceHub/community-resources.json
new file mode 100644
index 00000000..12838a6a
--- /dev/null
+++ b/components/ResourceHub/community-resources.json
@@ -0,0 +1,151 @@
+[
+ {
+ "name": "Gnosis Safe 🛠 Starting with the Safe Core SDK",
+ "url": "https://www.youtube.com/watch?v=t2LzhAFBxkI",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Safe Core SDK"
+ ]
+ },
+ {
+ "name": "How To Deploy a Smart Contract From a Web3 Multi-Sig Wallet",
+ "url": "https://www.youtube.com/watch?v=zn6omKzm3BI",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Protocol"
+ ]
+ },
+ {
+ "name": "Safe transaction service installation guide",
+ "url": "https://www.youtube.com/watch?v=FUytj_xStDI",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Safe Transaction Service"
+ ]
+ },
+ {
+ "name": "How do you add a custom network to the Safe UI?",
+ "url": "https://www.youtube.com/watch?v=E3v6p87bsYg",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "Safe Wallet Tutorial | Multisig Wallet for DeFi",
+ "url": "https://www.youtube.com/watch?v=GHyxe32Z814",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "Safe 🛠 Build a Group Wallet to Buy things with Frens using Safe {Core} Account Abstraction SDK",
+ "url": "https://www.youtube.com/watch?v=czGf5YgWs7M",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Safe Core SDK"
+ ]
+ },
+ {
+ "name": "How to Create a MultiSig Wallet Using Gnosis SAFE",
+ "url": "https://www.youtube.com/watch?v=JoFYldw6hVE",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "Step-by-Step Guide to SAFE: The Ultimate Multisig Wallet for DeFi",
+ "url": "https://www.youtube.com/watch?v=3edvkNc7Es0",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "SAFE Smart Contract Multi-Sig Storage 🔒 (Better than Hardware Wallet!⭐️) Step-by-Step Setup Guide ✅",
+ "url": "https://www.youtube.com/watch?v=EPa9I3LDplA",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "Safe MultiSig Contract Deep Dive",
+ "url": "https://www.youtube.com/watch?v=_2ZJ5HBEfUk",
+ "type": "Video",
+ "tags": [
+ "Deep Dive",
+ "Protocol"
+ ]
+ },
+ {
+ "name": "Ethereum: differences between createTransaction and createTransactionBatch (@safe-global/protocol...",
+ "url": "https://www.youtube.com/watch?v=fbZBVpBgq_4",
+ "type": "Video",
+ "tags": [
+ "Deep Dive",
+ "Protocol"
+ ]
+ },
+ {
+ "name": "Ethereum: Can a SAFE be deployed using a paymaster / gasless transaction?",
+ "url": "https://www.youtube.com/watch?v=VL2EkErsWaM",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Protocol",
+ "Gasless Transactions"
+ ]
+ },
+ {
+ "name": "Ethereum: How to deploy a Safe on Hardhat",
+ "url": "https://www.youtube.com/watch?v=GFkNdPAzEwI",
+ "type": "Video",
+ "tags": [
+ "Tutorial",
+ "Protocol",
+ "Hardhat"
+ ]
+ },
+ {
+ "name": "Safe Study (Japanese)",
+ "url": "https://zenn.dev/kozayupapa/articles/877ca3c93fc4a9",
+ "type": "Blog post",
+ "abstract": "ERC-4337(AccountAbstraction) 等のライブラリを提供しているSafeについて理解を深めるため、下記のドキュメントを要約していきたいとおもいます。",
+ "tags": [
+ "Tutorial",
+ "Protocol"
+ ]
+ },
+ {
+ "name": "How to Multi-Distribute ERC-20 tokens via Safe Core SDK",
+ "url": "https://mirror.xyz/0xa1AC2cC82249A44892802a99CA84c4ed1072B29C/lL8AYV_b4VzTbojuZEprrxD7-RTTap2IMIS8qIObfl8",
+ "type": "Blog post",
+ "abstract": "As part of the Atem.green project I’m helping to build, we want to incentivize early contributors by handing out (pre-launch) ERC-20 tokens. We use Coordinape to determine the impact every contributor has in a given month. From that we can calculate how many (pre-launch) token each contributor earned. Now the question is: How do we distribute these tokens?",
+ "tags": [
+ "Tutorial",
+ "Safe Core SDK"
+ ]
+ },
+ {
+ "name": "Build a treasury wallet with multisignature Safe",
+ "url": "https://blog.logrocket.com/build-treasury-wallet-multisignature-gnosis-safe/",
+ "type": "Blog post",
+ "abstract": "Imagine you and your friends are building an NFT marketplace. You are the CEO and your friend works as a Solidity engineer who writes the smart contract. The NFT marketplace becomes popular, and your revenue builds from the market fee of every NFT sale transaction. You store your profit inside a smart contract, and boast to the media about your company that has enough money to buy a private island. Then, the Solidity engineer disappears and withdraws all the funds from the treasury. You watch in horror.",
+ "tags": [
+ "Tutorial",
+ "Safe Core SDK"
+ ]
+ }
+]
diff --git a/components/ResourceHub/company-resources.json b/components/ResourceHub/company-resources.json
new file mode 100644
index 00000000..eefbdb02
--- /dev/null
+++ b/components/ResourceHub/company-resources.json
@@ -0,0 +1,310 @@
+[
+ {
+ "name": "Gnosis Safe 🛠 Safe modding 101: Create your own Safe module",
+ "url": "https://www.youtube.com/watch?v=nmDYc9PlAic",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Modules"
+ ]
+ },
+ {
+ "name": "Gnosis Safe Safe modding 101: Create your own Safe module",
+ "url": "https://www.youtube.com/watch?v=QdOfuxxXVBA",
+ "type": "Video",
+ "tags": [
+ "Introduction",
+ "Modules"
+ ]
+ },
+ {
+ "name": "Managing modules and transaction guards - Germán Martínez | Safe Core SDK | Devfolio",
+ "url": "https://www.youtube.com/watch?v=Y4PwNkU8OVM",
+ "type": "Video",
+ "tags": [
+ "Deep Dive",
+ "Modules",
+ "Guards"
+ ]
+ },
+ {
+ "name": "Safe Core SDK 🛠 Managing modules and transaction guards - Germán Martínez",
+ "url": "https://www.youtube.com/watch?v=ppwE9GXC5MA",
+ "type": "Video",
+ "tags": [
+ "Deep Dive",
+ "Modules",
+ "Guards"
+ ]
+ },
+ {
+ "name": "Safe 🛠 Building a Plugin with the Safe{Core} Protocol",
+ "url": "https://www.youtube.com/watch?v=EzAL1A5N_6k",
+ "type": "Video",
+ "tags": [
+ "Protocol",
+ "Plugins"
+ ]
+ },
+ {
+ "name": "Safe 🛠 Developing on Safe{Core} Protocol",
+ "url": "https://www.youtube.com/watch?v=6LpRecrNqFk",
+ "type": "Video",
+ "tags": [
+ "Protocol"
+ ]
+ },
+ {
+ "name": "Safe 🛠️ Building with the Safe{Core} SDK - Manuel Gellfart",
+ "url": "https://www.youtube.com/watch?v=seQNBoUnwEI",
+ "type": "Video",
+ "tags": [
+ "Safe Core SDK"
+ ]
+ },
+ {
+ "name": "Web3 Native (Aug 24, 2023) - Navigation the Future of Account Abstraction with Lukas Schor",
+ "url": "https://soundcloud.com/longhashventures_podcast/navigating-the-future-of-account-abstraction-with-safe-web3-native-podcast-safe-lukas-schor",
+ "type": "Podcast",
+ "tags": [
+ "Perspectives",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Defi Drip, EP. 6 (Aug 22, 2023) - Safe and Account Abstraction with Johannes Moormann",
+ "url": "https://www.youtube.com/watch?v=G50rE0129zI",
+ "type": "Podcast",
+ "tags": [
+ "Perspectives",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "On the brink, EP. 440 (July 26, 2023) - Account Abstraction Adoption and Barriers with Richard Meissner",
+ "url": "https://onthebrink-podcast.com/safe/",
+ "type": "Podcast",
+ "tags": [
+ "Perspectives",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Get the most secure web3 account in <30 seconds",
+ "url": "https://safe.mirror.xyz/pyf0meKAyooY1v8GB7z6Ik7o4wPHGTyCOcUf--UU-IA",
+ "type": "Blog post",
+ "abstract": "Introducing self-custody for everyone. From today, you can secure your crypto fast and free with Safe{Wallet} on Gnosis Chain using just your Google Account.",
+ "tags": [
+ "Tutorial",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "The new AI agent economy will run on Smart Accounts.",
+ "url": "https://safe.mirror.xyz/V965PykKzlE1PCuWxBjsCJR12WscLcnMxuvR9E9bP-Y",
+ "type": "Blog post",
+ "abstract": "Web3’s first billion users may not only be humans, but AI agents.",
+ "tags": [
+ "Perspectives",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Enhancing Blockchain Security with ERC-7512: A Standard for representing smart contract audits onchain",
+ "url": "https://safe.mirror.xyz/Li4Mb4teTEmosE6dAsnJ_iz3aMKOV_4lDU84W4TSfc0",
+ "type": "Blog post",
+ "abstract": "In a significant stride towards fortifying blockchain security, we at Safe, along with top security experts have introduced ERC-7512, a standard for onchain audit report representations.",
+ "tags": [
+ "Protocol",
+ "Security"
+ ]
+ },
+ {
+ "name": "Introducing Safe{Core} Protocol: Solving the wicked problem of smart accounts",
+ "url": "https://safe.mirror.xyz/KiklifJINUpklBzf-usK_54EC86AfSeX5wH89bNxglM",
+ "type": "Blog post",
+ "abstract": "Today, we are introducing a whitepaper for a modular, open-source Safe{Core} Protocol aiming to advance the smart account transition.",
+ "tags": [
+ "Introduction",
+ "Protocol",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Safe Modular Smart Account Architecture – Explained",
+ "url": "https://safe.mirror.xyz/t76RZPgEKdRmWNIbEzi75onWPeZrBrwbLRejuj-iPpQ",
+ "type": "Blog post",
+ "abstract": "Safe is at the forefront of modular Smart Account infrastructure, paving the way for developers to create a diverse range of applications and wallets.",
+ "tags": [
+ "Deep Dive",
+ "Account Abstraction",
+ "Protocol"
+ ]
+ },
+ {
+ "name": "Launching Monerium on Safe{Core}: Connecting Safes to Euro IBAN accounts",
+ "url": "https://safe.mirror.xyz/4pgiJAEQ2Jt0ij9Ezc8FSOSiRSfVY4Im8FZ0LuICx-8",
+ "type": "Blog post",
+ "abstract": "Today, the Safe{Core} Account Abstraction SDK added a shiny new tool to its toolbox.",
+ "tags": [
+ "Introduction",
+ "Mass Adoption"
+ ]
+ },
+ {
+ "name": "Redefine security with new Safe{Wallet} transaction risk scanner",
+ "url": "https://safe.mirror.xyz/rInLWZwD_sf7enjoFerj6FIzCYmVMGrrV8Nhg4THdwI",
+ "type": "Blog post",
+ "abstract": "We’re excited to bring you news of an important enhancement to your transactional security.",
+ "tags": [
+ "Security",
+ "Safe Wallet"
+ ]
+ },
+ {
+ "name": "Safe Smart Accounts & Diamond Proxies",
+ "url": "https://safe.mirror.xyz/P83_rVQuUQJAM-SnMpWvsHlN8oLnCeSncD1txyMDqpE",
+ "type": "Blog post",
+ "abstract": "Safe is a modular Smart Account protocol that uses Account Abstraction to build a wide range of wallets and other solutions through a shared plugin interface.",
+ "tags": [
+ "Deep Dive",
+ "Protocol",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Account Abstraction in a Multichain Landscape - Part 1: Addresses",
+ "url": "https://safe.mirror.xyz/4GcGAOFno-suTCjBewiYH4k4yXPDdIukC5woO5Bjc4w",
+ "type": "Blog post",
+ "abstract": "This is the first article in a series of posts exploring account abstraction in a multichain landscape.",
+ "tags": [
+ "Deep Dive",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Launching Safe{Core} Account Abstraction Stack with Stripe, Gelato and Web3Auth",
+ "url": "https://safe.mirror.xyz/FLvQQ5J9qXks0izRl73oC6LiFLofbwFNorwzaEj_xL8",
+ "type": "Blog post",
+ "abstract": "Safe is launching Safe{Core}, a modular AA stack with Stripe, Gelato, and Web3Auth as launch partners.",
+ "tags": [
+ "Introduction",
+ "Account Abstraction",
+ "Mass Adoption"
+ ]
+ },
+ {
+ "name": "Take Back Ownership Manifesto",
+ "url": "https://safe.mirror.xyz/tO26nZ4CruKCS8d49pyModJhzHw1TTm2QcMqx2lYaXQ",
+ "type": "Blog post",
+ "abstract": "Not your keys, not your coins.",
+ "tags": [
+ "Perspectives",
+ "Account Abstraction"
+ ]
+ },
+ {
+ "name": "Safe Community Call #1 with Castle NFT Platform",
+ "url": "https://www.youtube.com/watch?v=PCtjRs0BpHE&list=PL0knnt70iEZoqz14dWu27utp5IAtf3UDn&index=14",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #2 with Onchain Den",
+ "url": "https://www.youtube.com/watch?v=o18qA1bvNXI",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #3 announcing Safe Grants and Liminal updates",
+ "url": "https://www.youtube.com/watch?v=nzT9HAb9lVw",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #4 with NinDAO",
+ "url": "https://www.youtube.com/watch?v=eosjuOocH1Y",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #5 with Richard Meissner",
+ "url": "https://www.youtube.com/watch?v=9XUXkfwDixA",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #6 with Tribes Co-Wallet",
+ "url": "https://www.youtube.com/watch?v=j44PnR-aGL8",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #7 announcing Safe Core and Account Abstraction Hackathon",
+ "url": "https://www.youtube.com/watch?v=XOkVwtJOHSI",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #8 with Podarchy Explorer demo from Metropolis",
+ "url": "https://www.youtube.com/watch?v=l6jKLPp-ZbQ",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #9 with Brahma Fi Console",
+ "url": "https://www.youtube.com/watch?v=vt0F0MnIB9I",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #10 with Redefine and Coinshift",
+ "url": "https://www.youtube.com/watch?v=-M0xBi3lH1s",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #11 on Safe{Core} Protocol, Safe{Con}, Safe Grants Program and more",
+ "url": "https://www.youtube.com/watch?v=8_5H0Y1THEo",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Community Call #12: Grants Council and Safe DAO updates, ZK integrations & DAAta and AI Hackathon",
+ "url": "https://www.youtube.com/watch?v=_WbnF_qyjeQ",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ },
+ {
+ "name": "Safe Community Call #13",
+ "url": "https://www.youtube.com/watch?v=5UaCdug2LPA",
+ "type": "Video",
+ "tags": [
+ "Community Call"
+ ]
+ }
+]
diff --git a/components/ResourceHub/index.tsx b/components/ResourceHub/index.tsx
new file mode 100644
index 00000000..901df11a
--- /dev/null
+++ b/components/ResourceHub/index.tsx
@@ -0,0 +1,5 @@
+import dynamic from 'next/dynamic'
+
+const Projects = dynamic(async () => await import('./Resources'))
+
+export default Projects
diff --git a/components/ResourceHub/styles.module.css b/components/ResourceHub/styles.module.css
new file mode 100644
index 00000000..c8febfed
--- /dev/null
+++ b/components/ResourceHub/styles.module.css
@@ -0,0 +1,203 @@
+.wrapper {
+ margin-top: 0 !important;
+}
+
+.cardWrapper {
+ position: relative;
+}
+
+.searchField :global .MuiInputBase-root {
+ background: white;
+}
+
+/* Project card */
+.card {
+ background: var(--mui-palette-border-background);
+ box-shadow: inset 0 0 0 1px var(--mui-palette-border-light);
+ border-radius: 6px;
+ padding: 24px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ position: relative;
+ transition: 0.3s;
+}
+
+.outline:hover {
+ box-shadow: inset 0 0 0 1px var(--mui-palette-primary-main);
+}
+
+.image {
+ width: 48px;
+ height: 48px;
+ margin-bottom: 16px;
+}
+
+.image > img {
+ object-fit: contain;
+}
+
+.socials {
+ position: absolute;
+ top: 24px;
+ right: 24px;
+ display: flex;
+ gap: 8px;
+ z-index: 1;
+}
+
+.categories {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+ margin-top: 16px;
+ overflow-y: auto;
+ scrollbar-width: none; /* Firefox */
+}
+
+.categories::-webkit-scrollbar {
+ display: none;
+}
+
+.chip {
+ border-radius: 4px;
+ height: 23px;
+ font-size: 14px;
+ cursor: pointer;
+}
+
+.reset {
+ text-decoration: none;
+ color: var(--mui-palette-text-primary);
+ cursor: pointer;
+}
+
+.reset:hover {
+ color: var(--mui-palette-primary-light);
+}
+
+.sidebar {
+ display: none;
+}
+
+.accordion {
+ background-color: transparent;
+ margin: 0 !important;
+}
+
+/* Remove double borders between Accordions */
+.accordion + .accordion {
+ clip-path: inset(0px -1px -1px -1px);
+}
+
+.accordion :global .Mui-expanded {
+ min-height: unset;
+}
+
+.accordion :global .MuiAccordionSummary-expandIconWrapper {
+ margin-right: 2px;
+}
+
+.accordion :global .MuiAccordionSummary-content {
+ margin: 16px 0 !important;
+}
+
+.accordion :global .MuiAccordionDetails-root {
+ padding-top: 0;
+}
+
+.list {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.label {
+ display: flex;
+ margin: 0;
+ width: 100%;
+ justify-content: space-between;
+}
+
+.chipContainer {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+}
+
+.description {
+ color: var(--mui-palette-primary-light);
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-line-clamp: 5;
+ -webkit-box-orient: vertical;
+ flex-shrink: 0;
+}
+
+.filterButton {
+ border: 1px solid var(--mui-palette-border-light);
+ color: var(--mui-palette-text-primary);
+ display: flex;
+ align-items: center;
+ padding: 0px 16px;
+ gap: 16px;
+ height: 48px;
+ font-size: 16px;
+}
+
+.baseButton {
+ border: 0;
+ background: 0;
+ color: inherit;
+ font-size: 18px;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+}
+
+/* Mobile filter */
+.appBar {
+ border-bottom: 1px solid var(--mui-palette-border-light);
+ font-size: 20px;
+ position: sticky;
+ background-color: var(--mui-palette-background-main);
+ color: var(--mui-palette-text-primary);
+}
+
+.backButton {
+ width: 64px;
+}
+
+.backButton:hover {
+ background-color: unset;
+}
+
+.filterWrapper {
+ padding: 60px 16px 20px;
+ background-color: var(--mui-palette-background-main);
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+}
+
+.filterWrapper :global .MuiPaper-root {
+ box-shadow: unset;
+}
+
+.filterWrapper :global .MuiPaper-root:not(:last-child) {
+ border-bottom: 1px solid var(--mui-palette-border-light);
+}
+
+@media (min-width: 600px) {
+ .filterButton {
+ display: none;
+ }
+
+ .sidebar {
+ display: block;
+ }
+}
+
+.searchField input:focus-visible {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+}
diff --git a/components/ResourceHub/useResourceSearch.ts b/components/ResourceHub/useResourceSearch.ts
new file mode 100644
index 00000000..119352b2
--- /dev/null
+++ b/components/ResourceHub/useResourceSearch.ts
@@ -0,0 +1,41 @@
+import { useMemo } from 'react'
+import Fuse from 'fuse.js'
+import { type KnowledgeResource } from './Resources'
+
+const useResourceSearch = (
+ resources: KnowledgeResource[],
+ query: string
+): KnowledgeResource[] => {
+ const fuse = useMemo(
+ () =>
+ new Fuse(resources, {
+ keys: [
+ {
+ name: 'name',
+ weight: 0.99
+ },
+ {
+ name: 'abstract',
+ weight: 0.5
+ },
+ {
+ name: 'tags',
+ weight: 0.5
+ }
+ ],
+ threshold: 0.3,
+ findAllMatches: true
+ }),
+ [resources]
+ )
+
+ return useMemo(() => {
+ if (query.length === 0) {
+ return resources
+ }
+
+ return fuse.search(query).map(result => result.item)
+ }, [fuse, resources, query])
+}
+
+export { useResourceSearch }
diff --git a/components/YouTube/Youtube.module.css b/components/YouTube/Youtube.module.css
new file mode 100644
index 00000000..eb0d107c
--- /dev/null
+++ b/components/YouTube/Youtube.module.css
@@ -0,0 +1,15 @@
+.video-responsive {
+ overflow: hidden;
+ padding-bottom: 56.25%;
+ position: relative;
+ height: 0;
+ width: 100%;
+}
+
+.video-responsive iframe {
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ position: absolute;
+}
diff --git a/components/YouTube/index.tsx b/components/YouTube/index.tsx
new file mode 100644
index 00000000..48af89a4
--- /dev/null
+++ b/components/YouTube/index.tsx
@@ -0,0 +1,14 @@
+const YouTubeEmbed: React.FC<{ embedId: string }> = ({ embedId }) => (
+
+
+
+)
+
+export default YouTubeEmbed
diff --git a/contact-us.md b/contact-us.md
deleted file mode 100644
index dd03f3e7..00000000
--- a/contact-us.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Contact us
-
-## Social media
-
-- [Twitter](https://twitter.com/safe)
-- [LinkedIn](https://www.linkedin.com/company/safe-ecosystem/)
-- [YouTube](https://www.youtube.com/@safeglobal)
-- [Mirror](https://safe.mirror.xyz)
-- [Safe{DAO} Forum](https://forum.safe.global)
-
-## Tools
-
-- [Production ready tools on GitHub](https://github.com/safe-global)
-- [Experimental tools on GitHub](https://github.com/5afe)
-- [Safe analytics on Dune](https://dune.com/safe)
-
-## Developer support
-
-- [Stack Exchange](https://ethereum.stackexchange.com/questions/tagged/safe-core)
diff --git a/cypress.config.ts b/cypress.config.ts
new file mode 100644
index 00000000..54956d89
--- /dev/null
+++ b/cypress.config.ts
@@ -0,0 +1,24 @@
+import { defineConfig } from 'cypress'
+
+export default defineConfig({
+ userAgent: 'cypress',
+ retries: {
+ runMode: 0,
+ openMode: 0
+ },
+ screenshotOnRunFailure: process.env.CI === 'true',
+ video: process.env.CI === 'true',
+ includeShadowDom: true,
+ chromeWebSecurity: process.env.CHROME_WEB_SECURITY !== 'false',
+ viewportWidth: 1920,
+ viewportHeight: 1080,
+ env: {
+ coverage: false
+ },
+ e2e: {
+ testIsolation: false,
+ baseUrl: process.env.NEXT_PUBLIC_HOST_URL,
+ specPattern: 'tests/**/*.spec.{js,jsx,ts,tsx}',
+ supportFile: false
+ }
+})
diff --git a/examples/.gitignore b/examples/.gitignore
deleted file mode 100644
index 468d7fe8..00000000
--- a/examples/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-# Dependency directory
-node_modules
-
-.env
\ No newline at end of file
diff --git a/examples/README.md b/examples/README.md
deleted file mode 100644
index a3a2ee23..00000000
--- a/examples/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Safe developer docs code examples
-
-Code examples showing how to use safe tools.
-
-1. [Relay Kit Quickstart](/examples/relay-kit/index.ts): [Documentation](../learn/safe-core/safe-core-account-abstraction-sdk/relay-kit.md)
-
-Tip: Use [ts-node](https://github.com/TypeStrong/ts-node) to run a Typescript file in Node.js.
-
-```bash
-npx ts-node examples/relay-kit/index.ts
-```
diff --git a/examples/example.env b/examples/example.env
deleted file mode 100644
index e50e87b6..00000000
--- a/examples/example.env
+++ /dev/null
@@ -1,4 +0,0 @@
-export OWNER_1_PRIVATE_KEY=''
-export OWNER_2_PRIVATE_KEY=''
-export OWNER_3_PRIVATE_KEY=''
-export GELATO_RELAY_API_KEY=''
\ No newline at end of file
diff --git a/examples/package.json b/examples/package.json
deleted file mode 100644
index c9b062f9..00000000
--- a/examples/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "safe-examples",
- "version": "1.0.0",
- "description": "Code examples showing how to use Safe tools.",
- "main": "index.ts",
- "repository": "git@github.com:5afe/safe-examples.git",
- "author": "Safe ",
- "license": "MIT",
- "private": false,
- "dependencies": {
- "@safe-global/api-kit": "^1.1.0",
- "@safe-global/protocol-kit": "^1.0.0",
- "@safe-global/relay-kit": "^1.0.0",
- "@safe-global/safe-core-sdk-types": "^2.0.0",
- "dotenv": "^16.0.3",
- "ethers": "5.7.2"
- }
-}
diff --git a/examples/protocol-kit/index.ts b/examples/protocol-kit/index.ts
deleted file mode 100644
index fa3060ac..00000000
--- a/examples/protocol-kit/index.ts
+++ /dev/null
@@ -1,183 +0,0 @@
-import SafeApiKit from '@safe-global/api-kit'
-import Safe, { EthersAdapter, SafeAccountConfig, SafeFactory } from '@safe-global/protocol-kit'
-import { SafeTransaction, SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types'
-import { ethers } from 'ethers'
-
-// Run this file:
-// Source examples/.env
-// npx ts-node examples/protocol-kit/index.ts
-
-// https://chainlist.org/?search=goerli&testnets=true
-const RPC_URL = 'https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'
-const provider = new ethers.providers.JsonRpcProvider(RPC_URL)
-
-// Initialize signers
-
-// Create a wallet instance from the sender's private key
-const owner1Signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider)
-const owner2Signer = new ethers.Wallet(process.env.OWNER_2_PRIVATE_KEY!, provider)
-const owner3Signer = new ethers.Wallet(process.env.OWNER_3_PRIVATE_KEY!, provider)
-
-const ethAdapterOwner1 = new EthersAdapter({
- ethers,
- signerOrProvider: owner1Signer
-})
-
-const txServiceUrl = 'https://safe-transaction-goerli.safe.global'
-const safeService = new SafeApiKit({ txServiceUrl, ethAdapter: ethAdapterOwner1 })
-let safeFactory: SafeFactory
-let safeSdkOwner1: Safe
-let safeAddress: string
-
-// If you have an existing Safe, you can use it instead of deploying a new one
-const EXISTING_SAFE_ADDRESS = '0xF188d41FD181f94960C5451D7ff6FdbcDf201a71'
-
-async function deploySafe() {
- console.log('Deploying Safe...')
- safeFactory = await SafeFactory.create({ ethAdapter: ethAdapterOwner1 })
-
- const safeAccountConfig: SafeAccountConfig = {
- owners: [
- await owner1Signer.getAddress(),
- await owner2Signer.getAddress(),
- await owner3Signer.getAddress()
- ],
- threshold: 2,
- // ... (Optional params)
- // https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#deploysafe
- }
-
- /* This Safe is connected to owner 1 because the factory was initialized
- with an adapter that had owner 1 as the signer. */
- safeSdkOwner1 = await safeFactory.deploySafe({ safeAccountConfig })
-
- safeAddress = await safeSdkOwner1.getAddress()
-
- console.log('Your Safe has been deployed:')
- console.log(`https://goerli.etherscan.io/address/${safeAddress}`)
- console.log(`https://app.safe.global/gor:${safeAddress}`)
-}
-
-async function initalizeSafe(existingAddress = EXISTING_SAFE_ADDRESS) {
-
- safeAddress = existingAddress
- const ethAdapterOwner1 = new EthersAdapter({
- ethers,
- signerOrProvider: owner1Signer
- })
-
- safeSdkOwner1 = await Safe.create({
- ethAdapter: ethAdapterOwner1,
- safeAddress
- })
-}
-
-async function depositToSafe(depositSigner = owner1Signer, amount = '0.01') {
-
- const safeAmount = ethers.utils.parseUnits(amount, 'ether').toHexString()
-
- const transactionParameters = {
- to: safeAddress,
- value: safeAmount
- }
-
- const tx = await depositSigner.sendTransaction(transactionParameters)
-
- console.log(`Deposit Transaction: https://goerli.etherscan.io/tx/${tx.hash}`)
-}
-
-// Any address can be used for destination. In this example, we use vitalik.eth
-async function proposeTransaction(withdrawAmount = '0.005',
- destination = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045') {
-
- // Create a transaction object
- withdrawAmount = ethers.utils.parseUnits(withdrawAmount, 'ether').toString()
-
- const safeTransactionData: SafeTransactionDataPartial = {
- to: destination,
- data: '0x',
- value: withdrawAmount
- }
- // Create a Safe transaction with the provided parameters
- const safeTransaction: SafeTransaction = await safeSdkOwner1.createTransaction({ safeTransactionData })
-
- // Deterministic hash based on transaction parameters
- const safeTxHash = await safeSdkOwner1.getTransactionHash(safeTransaction)
-
- // Sign transaction to verify that the transaction is coming from owner 1
- const senderSignature = await safeSdkOwner1.signTransactionHash(safeTxHash)
-
- await safeService.proposeTransaction({
- safeAddress,
- safeTransactionData: safeTransaction.data,
- safeTxHash,
- senderAddress: await owner1Signer.getAddress(),
- senderSignature: senderSignature.data,
- })
-}
-
-async function confirmTransaction() {
-
- const pendingTransactions = (await safeService.getPendingTransactions(safeAddress)).results
-
- // Assumes that the first pending transaction is the transaction we want to confirm
- const transaction = pendingTransactions[0]
- const safeTxHash = transaction.safeTxHash
-
- const ethAdapterOwner2 = new EthersAdapter({
- ethers,
- signerOrProvider: owner2Signer
- })
-
- const safeSdkOwner2 = await Safe.create({
- ethAdapter: ethAdapterOwner2,
- safeAddress
- })
-
- const signature = await safeSdkOwner2.signTransactionHash(safeTxHash)
- const response = await safeService.confirmTransaction(safeTxHash, signature.data)
-
- console.log('Transaction confirmed:', response)
- return { safeTxHash, confirmationResponse: response }
-}
-
-async function executeTransaction(safeTxHash: string, safeSdk: Safe = safeSdkOwner1) {
-
- let safeBalance = await safeSdk.getBalance()
-
- console.log(`[Before Transaction] Safe Balance: ${ethers.utils.formatUnits(safeBalance, 'ether')} ETH`)
-
- const safeTransaction = await safeService.getTransaction(safeTxHash)
- const executeTxResponse = await safeSdk.executeTransaction(safeTransaction)
- const receipt = await executeTxResponse.transactionResponse?.wait()
-
- console.log('Transaction executed:')
- console.log(`https://goerli.etherscan.io/tx/${receipt?.transactionHash}`)
-
- safeBalance = await safeSdk.getBalance()
-
- console.log(`[After Transaction] Safe Balance: ${ethers.utils.formatUnits(safeBalance, 'ether')} ETH`)
-}
-
-async function main() {
-
- if (EXISTING_SAFE_ADDRESS) {
- await initalizeSafe()
- } else {
- await deploySafe()
- await depositToSafe()
- }
-
- await proposeTransaction()
- const { safeTxHash } = await confirmTransaction()
- await executeTransaction(safeTxHash)
-
- // Run the following to re-execute transactions:
- // const pendingTransactions = await getPendingTransactions()
- // const transaction = pendingTransactions[0]
- // const safeTxHash = transaction.safeTxHash
- // console.log({safeTxHash})
- // executeTransaction(safeTxHash, safeSdkOwner1)
-}
-
-main()
\ No newline at end of file
diff --git a/examples/relay-kit/index.ts b/examples/relay-kit/index.ts
deleted file mode 100644
index 296c1530..00000000
--- a/examples/relay-kit/index.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { ethers } from 'ethers'
-import { GelatoRelayPack } from '@safe-global/relay-kit'
-import Safe, { EthersAdapter, getSafeContract } from '@safe-global/protocol-kit'
-import { MetaTransactionData, MetaTransactionOptions, OperationType, RelayTransaction } from '@safe-global/safe-core-sdk-types'
-
-// Customize the following variables
-// https://chainlist.org
-const RPC_URL = 'https://endpoints.omniatech.io/v1/bsc/mainnet/public'
-const provider = new ethers.providers.JsonRpcProvider(RPC_URL)
-const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider)
-const safeAddress = '0x6651FD6Abe0843f7B6CB9047b89655cc7Aa78221' // Safe from which the transaction will be sent. Replace with your Safe address
-const chainId = 56
-
-// Any address can be used for destination. In this example, we use vitalik.eth
-const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
-const withdrawAmount = ethers.utils.parseUnits('0.0005', 'ether').toString()
-
-// Get Gelato Relay API Key: https://relay.gelato.network/
-const GELATO_RELAY_API_KEY = process.env.GELATO_RELAY_API_KEY!
-
-// Usually a limit of 21000 is used but for smart contract interactions, you can increase to 100000 because of the more complex interactions.
-const gasLimit = '100000'
-
-// Create a transaction object
-const safeTransactionData: MetaTransactionData = {
- to: destinationAddress,
- data: '0x',// leave blank for ETH transfers
- value: withdrawAmount,
- operation: OperationType.Call
-}
-const options: MetaTransactionOptions = {
- gasLimit,
- isSponsored: true
-}
-
-// Create the Protocol and Relay Kits instances
-
-async function relayTransaction() {
- const ethAdapter = new EthersAdapter({
- ethers,
- signerOrProvider: signer
- })
-
- const safeSDK = await Safe.create({
- ethAdapter,
- safeAddress
- })
-
- const relayKit = new GelatoRelayPack(GELATO_RELAY_API_KEY)
-
- // Prepare the transaction
- const safeTransaction = await safeSDK.createTransaction({
- safeTransactionData
- })
-
- const signedSafeTx = await safeSDK.signTransaction(safeTransaction)
- const safeSingletonContract = await getSafeContract({ ethAdapter, safeVersion: await safeSDK.getContractVersion() })
-
- const encodedTx = safeSingletonContract.encode('execTransaction', [
- signedSafeTx.data.to,
- signedSafeTx.data.value,
- signedSafeTx.data.data,
- signedSafeTx.data.operation,
- signedSafeTx.data.safeTxGas,
- signedSafeTx.data.baseGas,
- signedSafeTx.data.gasPrice,
- signedSafeTx.data.gasToken,
- signedSafeTx.data.refundReceiver,
- signedSafeTx.encodedSignatures()
- ])
-
- const relayTransaction: RelayTransaction = {
- target: safeAddress,
- encodedTransaction: encodedTx,
- chainId: chainId,
- options
- }
- const response = await relayKit.relayTransaction(relayTransaction)
-
- console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`)
-}
-
-relayTransaction()
diff --git a/examples/yarn.lock b/examples/yarn.lock
deleted file mode 100644
index bdde832c..00000000
--- a/examples/yarn.lock
+++ /dev/null
@@ -1,2785 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ethereumjs/common@2.5.0":
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268"
- integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==
- dependencies:
- crc-32 "^1.2.0"
- ethereumjs-util "^7.1.1"
-
-"@ethereumjs/common@^2.5.0":
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30"
- integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==
- dependencies:
- crc-32 "^1.2.0"
- ethereumjs-util "^7.1.5"
-
-"@ethereumjs/tx@3.3.2":
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00"
- integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==
- dependencies:
- "@ethereumjs/common" "^2.5.0"
- ethereumjs-util "^7.1.2"
-
-"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
- integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
- dependencies:
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/hash" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
-
-"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
- integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/networks" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
- "@ethersproject/web" "^5.7.0"
-
-"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
- integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
- dependencies:
- "@ethersproject/abstract-provider" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
-
-"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
- integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/rlp" "^5.7.0"
-
-"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
- integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
-
-"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b"
- integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
-
-"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
- integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- bn.js "^5.2.1"
-
-"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
- integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
- dependencies:
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
- integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
-
-"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e"
- integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==
- dependencies:
- "@ethersproject/abi" "^5.7.0"
- "@ethersproject/abstract-provider" "^5.7.0"
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
-
-"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
- integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
- dependencies:
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/base64" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
-
-"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf"
- integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==
- dependencies:
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/basex" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/pbkdf2" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/sha2" "^5.7.0"
- "@ethersproject/signing-key" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
- "@ethersproject/wordlists" "^5.7.0"
-
-"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360"
- integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==
- dependencies:
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/hdnode" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/pbkdf2" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/random" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
- aes-js "3.0.0"
- scrypt-js "3.0.1"
-
-"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
- integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- js-sha3 "0.8.0"
-
-"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
- integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
-
-"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0":
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
- integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
- dependencies:
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102"
- integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/sha2" "^5.7.0"
-
-"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
- integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
- dependencies:
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/providers@5.7.2":
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb"
- integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==
- dependencies:
- "@ethersproject/abstract-provider" "^5.7.0"
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/base64" "^5.7.0"
- "@ethersproject/basex" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/hash" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/networks" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/random" "^5.7.0"
- "@ethersproject/rlp" "^5.7.0"
- "@ethersproject/sha2" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
- "@ethersproject/web" "^5.7.0"
- bech32 "1.1.4"
- ws "7.4.6"
-
-"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c"
- integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
- integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb"
- integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- hash.js "1.1.7"
-
-"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
- integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- bn.js "^5.2.1"
- elliptic "6.5.4"
- hash.js "1.1.7"
-
-"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8"
- integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/sha2" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
-
-"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
- integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
- integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
- dependencies:
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/rlp" "^5.7.0"
- "@ethersproject/signing-key" "^5.7.0"
-
-"@ethersproject/units@5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1"
- integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/constants" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
-
-"@ethersproject/wallet@5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d"
- integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==
- dependencies:
- "@ethersproject/abstract-provider" "^5.7.0"
- "@ethersproject/abstract-signer" "^5.7.0"
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/hash" "^5.7.0"
- "@ethersproject/hdnode" "^5.7.0"
- "@ethersproject/json-wallets" "^5.7.0"
- "@ethersproject/keccak256" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/random" "^5.7.0"
- "@ethersproject/signing-key" "^5.7.0"
- "@ethersproject/transactions" "^5.7.0"
- "@ethersproject/wordlists" "^5.7.0"
-
-"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0":
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
- integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
- dependencies:
- "@ethersproject/base64" "^5.7.0"
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
-
-"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0":
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5"
- integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==
- dependencies:
- "@ethersproject/bytes" "^5.7.0"
- "@ethersproject/hash" "^5.7.0"
- "@ethersproject/logger" "^5.7.0"
- "@ethersproject/properties" "^5.7.0"
- "@ethersproject/strings" "^5.7.0"
-
-"@gelatonetwork/relay-sdk@^3.1.0":
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/@gelatonetwork/relay-sdk/-/relay-sdk-3.5.0.tgz#f8592b17492a582421dbeea39ec03180f82d20f3"
- integrity sha512-oj4rFH09yzFT4wnYCv7V3bZCIVhpuKbnK5jv0fgzclxTbbA6UEWZErn3QiD13yspiIkKafSgMWT0G8z41CINYg==
- dependencies:
- axios "0.24.0"
- ethers "5.7.2"
-
-"@safe-global/api-kit@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@safe-global/api-kit/-/api-kit-1.1.0.tgz#b46bcb4491d43576832488183019769d37e3f3e6"
- integrity sha512-3HB+Vl3dFunID4kadpAqYQQ9lfIJuCk9pYoJsfSWGeEgOOGFwexg3UtO8hh0JXoIO+bX8pm8x5GEF6pX8HeNTQ==
- dependencies:
- "@ethersproject/abstract-signer" "^5.7.0"
- "@safe-global/safe-core-sdk-types" "^2.0.0"
- node-fetch "^2.6.6"
-
-"@safe-global/protocol-kit@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-1.0.0.tgz#92a50d975bc3a9971993590c254a48a184c054bf"
- integrity sha512-dRU4ik7PVAWW/j9N1njaxAMA5qeXS7TQGrls2sKrwEfZTjoAJ0Jzn9BWn43yP9CaQJ++g5vZ9FjcHnAkVikblg==
- dependencies:
- "@ethersproject/address" "^5.7.0"
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/solidity" "^5.7.0"
- "@safe-global/safe-deployments" "^1.22.0"
- ethereumjs-util "^7.1.5"
- semver "^7.3.8"
- web3 "^1.8.1"
- web3-core "^1.8.1"
- web3-utils "^1.8.1"
-
-"@safe-global/relay-kit@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@safe-global/relay-kit/-/relay-kit-1.0.0.tgz#e2762badb6d9397acef05e8587f26fdc4553b5d0"
- integrity sha512-kOFxOoXDd2ZfLH3r2kUocZquhfY/V0K4AXzzFzVU2W8f89XzfgiG3ibjftMMuW650WUG5mHB8sXEcjSilPXviA==
- dependencies:
- "@gelatonetwork/relay-sdk" "^3.1.0"
- "@safe-global/protocol-kit" "^1.0.0"
- "@safe-global/safe-core-sdk-types" "^2.0.0"
- ethers "^5.7.2"
-
-"@safe-global/safe-core-sdk-types@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-2.0.0.tgz#643dd87c9738ff8b3eaecb06ce399cae8a48af02"
- integrity sha512-9bcGaEuJCRG1ccGxKNjLzJuXMqdJZEFkWi+1vf6UFO8gpmanasvBozMEo6fzUMtDBGgkkStYywhO6Cp0tKyD3Q==
- dependencies:
- "@ethersproject/bignumber" "^5.7.0"
- "@ethersproject/contracts" "^5.7.0"
- "@safe-global/safe-deployments" "^1.22.0"
- web3-core "^1.8.1"
- web3-utils "^1.8.1"
-
-"@safe-global/safe-deployments@^1.22.0":
- version "1.22.0"
- resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.22.0.tgz#4214ac5a9ebcad7cdbf5f641b0728bc0e497286e"
- integrity sha512-SmbeCRMlcO/EONxbV6nP6pM/60q0NIHVezxx5FMv0dIAkDffdbm25reonKlOk3AJYW1b/c6pZA0RbWDwFSJEkQ==
- dependencies:
- semver "^7.3.7"
-
-"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
- integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-
-"@szmarczak/http-timer@^4.0.5":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
- integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
- dependencies:
- defer-to-connect "^2.0.0"
-
-"@szmarczak/http-timer@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
- integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==
- dependencies:
- defer-to-connect "^2.0.1"
-
-"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1":
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682"
- integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==
- dependencies:
- "@types/node" "*"
-
-"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2":
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
- integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
- dependencies:
- "@types/http-cache-semantics" "*"
- "@types/keyv" "^3.1.4"
- "@types/node" "*"
- "@types/responselike" "^1.0.0"
-
-"@types/http-cache-semantics@*":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
- integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
-
-"@types/keyv@^3.1.4":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
- integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
- dependencies:
- "@types/node" "*"
-
-"@types/node@*":
- version "20.1.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.0.tgz#258805edc37c327cf706e64c6957f241ca4c4c20"
- integrity sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==
-
-"@types/node@^12.12.6":
- version "12.20.55"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
- integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
-
-"@types/pbkdf2@^3.0.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1"
- integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==
- dependencies:
- "@types/node" "*"
-
-"@types/responselike@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
- integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
- dependencies:
- "@types/node" "*"
-
-"@types/secp256k1@^4.0.1":
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c"
- integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==
- dependencies:
- "@types/node" "*"
-
-abortcontroller-polyfill@^1.7.3:
- version "1.7.5"
- resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed"
- integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==
-
-accepts@~1.3.8:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
- integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
- dependencies:
- mime-types "~2.1.34"
- negotiator "0.6.3"
-
-aes-js@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
- integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
-
-ajv@^6.12.3:
- version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
- 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"
-
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
- integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
-
-asn1@~0.2.3:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
- integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
- integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
-
-async-limiter@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
- integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-
-available-typed-arrays@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
- integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
- integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
-
-aws4@^1.8.0:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
- integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
-
-axios@0.24.0:
- version "0.24.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6"
- integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==
- dependencies:
- follow-redirects "^1.14.4"
-
-base-x@^3.0.2, base-x@^3.0.8:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
- integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
- dependencies:
- safe-buffer "^5.0.1"
-
-base64-js@^1.3.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
- dependencies:
- tweetnacl "^0.14.3"
-
-bech32@1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
- integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
-
-bignumber.js@^9.0.0:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6"
- integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==
-
-blakejs@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814"
- integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==
-
-bluebird@^3.5.0:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bn.js@4.11.6:
- version "4.11.6"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
- integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==
-
-bn.js@^4.11.6, bn.js@^4.11.9:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
- integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
-
-bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
- integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
-
-body-parser@1.20.1:
- version "1.20.1"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
- integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
- dependencies:
- bytes "3.1.2"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- http-errors "2.0.0"
- iconv-lite "0.4.24"
- on-finished "2.4.1"
- qs "6.11.0"
- raw-body "2.5.1"
- type-is "~1.6.18"
- unpipe "1.0.0"
-
-body-parser@^1.16.0:
- version "1.20.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
- integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
- dependencies:
- bytes "3.1.2"
- content-type "~1.0.5"
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- http-errors "2.0.0"
- iconv-lite "0.4.24"
- on-finished "2.4.1"
- qs "6.11.0"
- raw-body "2.5.2"
- type-is "~1.6.18"
- unpipe "1.0.0"
-
-brorand@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
-
-browserify-aes@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-bs58@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
- integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==
- dependencies:
- base-x "^3.0.2"
-
-bs58check@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
- integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
- dependencies:
- bs58 "^4.0.0"
- create-hash "^1.1.0"
- safe-buffer "^5.1.2"
-
-buffer-to-arraybuffer@^0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a"
- integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
-
-buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
-bufferutil@^4.0.1:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad"
- integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==
- dependencies:
- node-gyp-build "^4.3.0"
-
-bytes@3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
- integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-
-cacheable-lookup@^5.0.3:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
- integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
-
-cacheable-lookup@^6.0.4:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385"
- integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==
-
-cacheable-request@^7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
- integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^4.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^6.0.1"
- responselike "^2.0.0"
-
-call-bind@^1.0.0, call-bind@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
- dependencies:
- function-bind "^1.1.1"
- get-intrinsic "^1.0.2"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
- integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
-
-chownr@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-cids@^0.7.1:
- version "0.7.5"
- resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2"
- integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==
- dependencies:
- buffer "^5.5.0"
- class-is "^1.1.0"
- multibase "~0.6.0"
- multicodec "^1.0.0"
- multihashes "~0.4.15"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-class-is@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825"
- integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==
-
-clone-response@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
- integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
- dependencies:
- mimic-response "^1.0.0"
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-content-disposition@0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
- integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
- dependencies:
- safe-buffer "5.2.1"
-
-content-hash@^2.5.2:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211"
- integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==
- dependencies:
- cids "^0.7.1"
- multicodec "^0.5.5"
- multihashes "^0.4.15"
-
-content-type@~1.0.4, content-type@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
- integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
- integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
-
-cookie@0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
- integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
-
-core-util-is@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
-
-cors@^2.8.1:
- version "2.8.5"
- resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
- integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
- dependencies:
- object-assign "^4"
- vary "^1"
-
-crc-32@^1.2.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
- integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
-
-create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.4, create-hmac@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-fetch@^3.1.4:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
- integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
- dependencies:
- node-fetch "2.6.7"
-
-d@1, d@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
- integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
- dependencies:
- es5-ext "^0.10.50"
- type "^1.0.1"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
- dependencies:
- assert-plus "^1.0.0"
-
-debug@2.6.9, debug@^2.2.0:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-decode-uri-component@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
- integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
-
-decompress-response@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
- integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
- dependencies:
- mimic-response "^1.0.0"
-
-decompress-response@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
- integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
- dependencies:
- mimic-response "^3.1.0"
-
-defer-to-connect@^2.0.0, defer-to-connect@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
- integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-
-depd@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
- integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
-destroy@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
- integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
-
-dom-walk@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
- integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
-
-dotenv@^16.0.3:
- version "16.0.3"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
- integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
-
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
- integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-
-elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
- integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
- dependencies:
- bn.js "^4.11.9"
- brorand "^1.1.0"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.1"
- inherits "^2.0.4"
- minimalistic-assert "^1.0.1"
- minimalistic-crypto-utils "^1.0.1"
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-es5-ext@^0.10.35, es5-ext@^0.10.50:
- version "0.10.62"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
- integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
- dependencies:
- es6-iterator "^2.0.3"
- es6-symbol "^3.1.3"
- next-tick "^1.1.0"
-
-es6-iterator@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-promise@^4.2.8:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
- integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
-
-es6-symbol@^3.1.1, es6-symbol@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
- integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
- dependencies:
- d "^1.0.1"
- ext "^1.1.2"
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
- integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-
-eth-ens-namehash@2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf"
- integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==
- dependencies:
- idna-uts46-hx "^2.3.1"
- js-sha3 "^0.5.7"
-
-eth-lib@0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8"
- integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==
- dependencies:
- bn.js "^4.11.6"
- elliptic "^6.4.0"
- xhr-request-promise "^0.1.2"
-
-eth-lib@^0.1.26:
- version "0.1.29"
- resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9"
- integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==
- dependencies:
- bn.js "^4.11.6"
- elliptic "^6.4.0"
- nano-json-stream-parser "^0.1.2"
- servify "^0.1.12"
- ws "^3.0.0"
- xhr-request-promise "^0.1.2"
-
-ethereum-bloom-filters@^1.0.6:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a"
- integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==
- dependencies:
- js-sha3 "^0.8.0"
-
-ethereum-cryptography@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191"
- integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==
- dependencies:
- "@types/pbkdf2" "^3.0.0"
- "@types/secp256k1" "^4.0.1"
- blakejs "^1.1.0"
- browserify-aes "^1.2.0"
- bs58check "^2.1.2"
- create-hash "^1.2.0"
- create-hmac "^1.1.7"
- hash.js "^1.1.7"
- keccak "^3.0.0"
- pbkdf2 "^3.0.17"
- randombytes "^2.1.0"
- safe-buffer "^5.1.2"
- scrypt-js "^3.0.0"
- secp256k1 "^4.0.1"
- setimmediate "^1.0.5"
-
-ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5:
- version "7.1.5"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181"
- integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==
- dependencies:
- "@types/bn.js" "^5.1.0"
- bn.js "^5.1.2"
- create-hash "^1.1.2"
- ethereum-cryptography "^0.1.3"
- rlp "^2.2.4"
-
-ethers@5.7.2, ethers@^5.7.2:
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
- integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
- dependencies:
- "@ethersproject/abi" "5.7.0"
- "@ethersproject/abstract-provider" "5.7.0"
- "@ethersproject/abstract-signer" "5.7.0"
- "@ethersproject/address" "5.7.0"
- "@ethersproject/base64" "5.7.0"
- "@ethersproject/basex" "5.7.0"
- "@ethersproject/bignumber" "5.7.0"
- "@ethersproject/bytes" "5.7.0"
- "@ethersproject/constants" "5.7.0"
- "@ethersproject/contracts" "5.7.0"
- "@ethersproject/hash" "5.7.0"
- "@ethersproject/hdnode" "5.7.0"
- "@ethersproject/json-wallets" "5.7.0"
- "@ethersproject/keccak256" "5.7.0"
- "@ethersproject/logger" "5.7.0"
- "@ethersproject/networks" "5.7.1"
- "@ethersproject/pbkdf2" "5.7.0"
- "@ethersproject/properties" "5.7.0"
- "@ethersproject/providers" "5.7.2"
- "@ethersproject/random" "5.7.0"
- "@ethersproject/rlp" "5.7.0"
- "@ethersproject/sha2" "5.7.0"
- "@ethersproject/signing-key" "5.7.0"
- "@ethersproject/solidity" "5.7.0"
- "@ethersproject/strings" "5.7.0"
- "@ethersproject/transactions" "5.7.0"
- "@ethersproject/units" "5.7.0"
- "@ethersproject/wallet" "5.7.0"
- "@ethersproject/web" "5.7.1"
- "@ethersproject/wordlists" "5.7.0"
-
-ethjs-unit@0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"
- integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==
- dependencies:
- bn.js "4.11.6"
- number-to-bn "1.7.0"
-
-eventemitter3@4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
- integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
-
-evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-express@^4.14.0:
- version "4.18.2"
- resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
- integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
- dependencies:
- accepts "~1.3.8"
- array-flatten "1.1.1"
- body-parser "1.20.1"
- content-disposition "0.5.4"
- content-type "~1.0.4"
- cookie "0.5.0"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "2.0.0"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "1.2.0"
- fresh "0.5.2"
- http-errors "2.0.0"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "2.4.1"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.7"
- qs "6.11.0"
- range-parser "~1.2.1"
- safe-buffer "5.2.1"
- send "0.18.0"
- serve-static "1.15.0"
- setprototypeof "1.2.0"
- statuses "2.0.1"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-ext@^1.1.2:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
- integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
- dependencies:
- type "^2.7.2"
-
-extend@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
- integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
-
-extsprintf@^1.2.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
- integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
-
-fast-deep-equal@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-finalhandler@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
- integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "2.4.1"
- parseurl "~1.3.3"
- statuses "2.0.1"
- unpipe "~1.0.0"
-
-follow-redirects@^1.14.4:
- version "1.15.2"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
- integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
-
-for-each@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
- dependencies:
- is-callable "^1.1.3"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
- integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
-
-form-data-encoder@1.7.1:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96"
- integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
-forwarded@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
- integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-
-fs-extra@^4.0.2:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
- integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-minipass@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
- integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
- dependencies:
- minipass "^2.6.0"
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
- integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
- dependencies:
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.3"
-
-get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
-get-stream@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
- dependencies:
- assert-plus "^1.0.0"
-
-global@~4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
- integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
- dependencies:
- min-document "^2.19.0"
- process "^0.11.10"
-
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
- dependencies:
- get-intrinsic "^1.1.3"
-
-got@12.1.0:
- version "12.1.0"
- resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4"
- integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==
- dependencies:
- "@sindresorhus/is" "^4.6.0"
- "@szmarczak/http-timer" "^5.0.1"
- "@types/cacheable-request" "^6.0.2"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^6.0.4"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- form-data-encoder "1.7.1"
- get-stream "^6.0.1"
- http2-wrapper "^2.1.10"
- lowercase-keys "^3.0.0"
- p-cancelable "^3.0.0"
- responselike "^2.0.0"
-
-got@^11.8.5:
- version "11.8.6"
- resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
- integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
- dependencies:
- "@sindresorhus/is" "^4.0.0"
- "@szmarczak/http-timer" "^4.0.5"
- "@types/cacheable-request" "^6.0.1"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^5.0.3"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- http2-wrapper "^1.0.0-beta.5.2"
- lowercase-keys "^2.0.0"
- p-cancelable "^2.0.0"
- responselike "^2.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
- integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==
-
-har-validator@~5.1.3:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
- integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
- dependencies:
- ajv "^6.12.3"
- har-schema "^2.0.0"
-
-has-symbols@^1.0.2, has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-has-tostringtag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
- integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
- dependencies:
- has-symbols "^1.0.2"
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hash-base@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
- integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-hmac-drbg@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-http-cache-semantics@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http-errors@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
- integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
- dependencies:
- depd "2.0.0"
- inherits "2.0.4"
- setprototypeof "1.2.0"
- statuses "2.0.1"
- toidentifier "1.0.1"
-
-http-https@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b"
- integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-http2-wrapper@^1.0.0-beta.5.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
- integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.0.0"
-
-http2-wrapper@^2.1.10:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3"
- integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.2.0"
-
-iconv-lite@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-idna-uts46-hx@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9"
- integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==
- dependencies:
- punycode "2.1.0"
-
-ieee754@^1.1.13:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ipaddr.js@1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
- integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-
-is-arguments@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
- integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-callable@^1.1.3:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
- integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-
-is-function@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
- integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
-
-is-generator-function@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
- integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-hex-prefixed@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
- integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==
-
-is-typed-array@^1.1.10, is-typed-array@^1.1.3:
- version "1.1.10"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
- integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
- dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.0"
-
-is-typedarray@^1.0.0, is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
- integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
-
-js-sha3@0.8.0, js-sha3@^0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
- integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
-
-js-sha3@^0.5.7:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
- integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
- integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
-
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
- integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsprim@^1.2.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
- integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.4.0"
- verror "1.10.0"
-
-keccak@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276"
- integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==
- dependencies:
- node-addon-api "^2.0.0"
- node-gyp-build "^4.2.0"
- readable-stream "^3.6.0"
-
-keyv@^4.0.0:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
- integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==
- dependencies:
- json-buffer "3.0.1"
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lowercase-keys@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2"
- integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
- integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
-
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
- integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
-
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
- integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
-
-mime-db@1.52.0:
- version "1.52.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
- integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-
-mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
- version "2.1.35"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
- integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
- dependencies:
- mime-db "1.52.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-response@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-mimic-response@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
- integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
- dependencies:
- dom-walk "^0.1.0"
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
-
-minimist@^1.2.6:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-minipass@^2.6.0, minipass@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
- integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
- dependencies:
- safe-buffer "^5.1.2"
- yallist "^3.0.0"
-
-minizlib@^1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
- integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
- dependencies:
- minipass "^2.9.0"
-
-mkdirp-promise@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1"
- integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==
- dependencies:
- mkdirp "*"
-
-mkdirp@*:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
- integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-
-mkdirp@^0.5.5:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
- dependencies:
- minimist "^1.2.6"
-
-mock-fs@^4.1.0:
- version "4.14.0"
- resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18"
- integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-
-ms@2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-multibase@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b"
- integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==
- dependencies:
- base-x "^3.0.8"
- buffer "^5.5.0"
-
-multibase@~0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b"
- integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==
- dependencies:
- base-x "^3.0.8"
- buffer "^5.5.0"
-
-multicodec@^0.5.5:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd"
- integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==
- dependencies:
- varint "^5.0.0"
-
-multicodec@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f"
- integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==
- dependencies:
- buffer "^5.6.0"
- varint "^5.0.0"
-
-multihashes@^0.4.15, multihashes@~0.4.15:
- version "0.4.21"
- resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"
- integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==
- dependencies:
- buffer "^5.5.0"
- multibase "^0.7.0"
- varint "^5.0.0"
-
-nano-json-stream-parser@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f"
- integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==
-
-negotiator@0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
-next-tick@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
- integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
-
-node-addon-api@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
- integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
-
-node-fetch@2.6.7:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
- integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
- dependencies:
- whatwg-url "^5.0.0"
-
-node-fetch@^2.6.6:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
- integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
- dependencies:
- whatwg-url "^5.0.0"
-
-node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
- integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
-
-normalize-url@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
- integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-
-number-to-bn@1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0"
- integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==
- dependencies:
- bn.js "4.11.6"
- strip-hex-prefix "1.0.0"
-
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-
-object-inspect@^1.9.0:
- version "1.12.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
- integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
-
-oboe@2.1.5:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd"
- integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==
- dependencies:
- http-https "^1.0.0"
-
-on-finished@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
- integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
- dependencies:
- ee-first "1.1.1"
-
-once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-p-cancelable@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
- integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
-
-p-cancelable@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
- integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
-
-parse-headers@^2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9"
- integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==
-
-parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
- integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
-
-pbkdf2@^3.0.17:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
- integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
-
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
-
-proxy-addr@~2.0.7:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
- integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
- dependencies:
- forwarded "0.2.0"
- ipaddr.js "1.9.1"
-
-psl@^1.1.28:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
- integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-punycode@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
- integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==
-
-punycode@^2.1.0, punycode@^2.1.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
- integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
-
-qs@6.11.0:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
- integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
- dependencies:
- side-channel "^1.0.4"
-
-qs@~6.5.2:
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
- integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
-
-query-string@^5.0.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
- integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
- dependencies:
- decode-uri-component "^0.2.0"
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
-randombytes@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-range-parser@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
- integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-raw-body@2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
- integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
- dependencies:
- bytes "3.1.2"
- http-errors "2.0.0"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
-raw-body@2.5.2:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
- integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
- dependencies:
- bytes "3.1.2"
- http-errors "2.0.0"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
-readable-stream@^3.6.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-request@^2.79.0:
- version "2.88.2"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
- integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.3"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.5.0"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
-resolve-alpn@^1.0.0, resolve-alpn@^1.2.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
- integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-
-responselike@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
- integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
- dependencies:
- lowercase-keys "^2.0.0"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-rlp@^2.2.4:
- version "2.2.7"
- resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf"
- integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==
- dependencies:
- bn.js "^5.2.0"
-
-safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-buffer@~5.1.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
- integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
-
-secp256k1@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303"
- integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==
- dependencies:
- elliptic "^6.5.4"
- node-addon-api "^2.0.0"
- node-gyp-build "^4.2.0"
-
-semver@^7.3.7, semver@^7.3.8:
- version "7.5.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
- integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
- dependencies:
- lru-cache "^6.0.0"
-
-send@0.18.0:
- version "0.18.0"
- resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
- integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
- dependencies:
- debug "2.6.9"
- depd "2.0.0"
- destroy "1.2.0"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "2.0.0"
- mime "1.6.0"
- ms "2.1.3"
- on-finished "2.4.1"
- range-parser "~1.2.1"
- statuses "2.0.1"
-
-serve-static@1.15.0:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
- integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.18.0"
-
-servify@^0.1.12:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95"
- integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==
- dependencies:
- body-parser "^1.16.0"
- cors "^2.8.1"
- express "^4.14.0"
- request "^2.79.0"
- xhr "^2.3.3"
-
-setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
-
-setprototypeof@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
- integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-side-channel@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
- integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
- dependencies:
- call-bind "^1.0.0"
- get-intrinsic "^1.0.2"
- object-inspect "^1.9.0"
-
-simple-concat@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
- integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
-
-simple-get@^2.7.0:
- version "2.8.2"
- resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019"
- integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==
- dependencies:
- decompress-response "^3.3.0"
- once "^1.3.1"
- simple-concat "^1.0.0"
-
-sshpk@^1.7.0:
- version "1.17.0"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
- integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
-statuses@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
- integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-
-strict-uri-encode@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
- integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-strip-hex-prefix@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
- integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==
- dependencies:
- is-hex-prefixed "1.0.0"
-
-swarm-js@^0.1.40:
- version "0.1.42"
- resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979"
- integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==
- dependencies:
- bluebird "^3.5.0"
- buffer "^5.0.5"
- eth-lib "^0.1.26"
- fs-extra "^4.0.2"
- got "^11.8.5"
- mime-types "^2.1.16"
- mkdirp-promise "^5.0.1"
- mock-fs "^4.1.0"
- setimmediate "^1.0.5"
- tar "^4.0.2"
- xhr-request "^1.0.1"
-
-tar@^4.0.2:
- version "4.4.19"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
- integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
- dependencies:
- chownr "^1.1.4"
- fs-minipass "^1.2.7"
- minipass "^2.9.0"
- minizlib "^1.3.3"
- mkdirp "^0.5.5"
- safe-buffer "^5.2.1"
- yallist "^3.1.1"
-
-timed-out@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
- integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==
-
-toidentifier@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
- integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-
-tough-cookie@~2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
- dependencies:
- psl "^1.1.28"
- punycode "^2.1.1"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
- integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
-
-type-is@~1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
- integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.24"
-
-type@^1.0.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
- integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
-
-type@^2.7.2:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
- integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
-
-typedarray-to-buffer@^3.1.5:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
- integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
- dependencies:
- is-typedarray "^1.0.0"
-
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
- integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-url-set-query@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339"
- integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==
-
-utf-8-validate@^5.0.2:
- version "5.0.10"
- resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
- integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
- dependencies:
- node-gyp-build "^4.3.0"
-
-utf8@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
- integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
-
-util-deprecate@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-util@^0.12.5:
- version "0.12.5"
- resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc"
- integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==
- dependencies:
- inherits "^2.0.3"
- is-arguments "^1.0.4"
- is-generator-function "^1.0.7"
- is-typed-array "^1.1.3"
- which-typed-array "^1.1.2"
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-
-uuid@^3.3.2:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
- integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
-uuid@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
- integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
-
-varint@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"
- integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==
-
-vary@^1, vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-web3-bzz@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.9.0.tgz#3334049f386e73e2b3dcfa96432e65391538d8ac"
- integrity sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg==
- dependencies:
- "@types/node" "^12.12.6"
- got "12.1.0"
- swarm-js "^0.1.40"
-
-web3-core-helpers@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.9.0.tgz#a1ca4ac7b9cec822886643312d2e98b0e4d8f1bc"
- integrity sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg==
- dependencies:
- web3-eth-iban "1.9.0"
- web3-utils "1.9.0"
-
-web3-core-method@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.9.0.tgz#81da8aa21503b470537c9f075f30adfad194a2d8"
- integrity sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w==
- dependencies:
- "@ethersproject/transactions" "^5.6.2"
- web3-core-helpers "1.9.0"
- web3-core-promievent "1.9.0"
- web3-core-subscriptions "1.9.0"
- web3-utils "1.9.0"
-
-web3-core-promievent@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.9.0.tgz#2598a4d91b4edd3607366529f52bc96dee9f6d83"
- integrity sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ==
- dependencies:
- eventemitter3 "4.0.4"
-
-web3-core-requestmanager@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.9.0.tgz#9d7d0e7f890cf7a24e9c568b9772c64d57fc4fcd"
- integrity sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q==
- dependencies:
- util "^0.12.5"
- web3-core-helpers "1.9.0"
- web3-providers-http "1.9.0"
- web3-providers-ipc "1.9.0"
- web3-providers-ws "1.9.0"
-
-web3-core-subscriptions@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.9.0.tgz#dc67b478875dab1875844df3307a986dd7d468dd"
- integrity sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA==
- dependencies:
- eventemitter3 "4.0.4"
- web3-core-helpers "1.9.0"
-
-web3-core@1.9.0, web3-core@^1.8.1:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.9.0.tgz#9cfafb2f8c01931429108af75205610406a5a1ab"
- integrity sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w==
- dependencies:
- "@types/bn.js" "^5.1.1"
- "@types/node" "^12.12.6"
- bignumber.js "^9.0.0"
- web3-core-helpers "1.9.0"
- web3-core-method "1.9.0"
- web3-core-requestmanager "1.9.0"
- web3-utils "1.9.0"
-
-web3-eth-abi@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.9.0.tgz#18662ef68bd3d25eedd9a1a1484089c39529c652"
- integrity sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA==
- dependencies:
- "@ethersproject/abi" "^5.6.3"
- web3-utils "1.9.0"
-
-web3-eth-accounts@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.9.0.tgz#fab7d563c63bdff2aa5ad89a94faf128961d9504"
- integrity sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA==
- dependencies:
- "@ethereumjs/common" "2.5.0"
- "@ethereumjs/tx" "3.3.2"
- eth-lib "0.2.8"
- ethereumjs-util "^7.1.5"
- scrypt-js "^3.0.1"
- uuid "^9.0.0"
- web3-core "1.9.0"
- web3-core-helpers "1.9.0"
- web3-core-method "1.9.0"
- web3-utils "1.9.0"
-
-web3-eth-contract@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.9.0.tgz#00b7ac8314d562d10d7dd0c7d0f52555c3862995"
- integrity sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ==
- dependencies:
- "@types/bn.js" "^5.1.1"
- web3-core "1.9.0"
- web3-core-helpers "1.9.0"
- web3-core-method "1.9.0"
- web3-core-promievent "1.9.0"
- web3-core-subscriptions "1.9.0"
- web3-eth-abi "1.9.0"
- web3-utils "1.9.0"
-
-web3-eth-ens@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.9.0.tgz#2014b16e1116be5ab34404a8db29ad1d8632ced0"
- integrity sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA==
- dependencies:
- content-hash "^2.5.2"
- eth-ens-namehash "2.0.8"
- web3-core "1.9.0"
- web3-core-helpers "1.9.0"
- web3-core-promievent "1.9.0"
- web3-eth-abi "1.9.0"
- web3-eth-contract "1.9.0"
- web3-utils "1.9.0"
-
-web3-eth-iban@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.9.0.tgz#a8f838e42c20d49ff58aaa9f67ece47a968e40b1"
- integrity sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog==
- dependencies:
- bn.js "^5.2.1"
- web3-utils "1.9.0"
-
-web3-eth-personal@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.9.0.tgz#f5092bcb2688979dd7778d5a56ae6922c341ce52"
- integrity sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg==
- dependencies:
- "@types/node" "^12.12.6"
- web3-core "1.9.0"
- web3-core-helpers "1.9.0"
- web3-core-method "1.9.0"
- web3-net "1.9.0"
- web3-utils "1.9.0"
-
-web3-eth@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.9.0.tgz#1fe82ba429a44b1aa0a3b95de3e79e6c5a9eb00c"
- integrity sha512-c5gSWk9bLNr6VPATHmZ1n7LTIefIZQnJMzfnvkoBcIFGKJbGmsuRhv6lEXsKdAO/FlqYnSbaw3fOq1fVFiIOFQ==
- dependencies:
- web3-core "1.9.0"
- web3-core-helpers "1.9.0"
- web3-core-method "1.9.0"
- web3-core-subscriptions "1.9.0"
- web3-eth-abi "1.9.0"
- web3-eth-accounts "1.9.0"
- web3-eth-contract "1.9.0"
- web3-eth-ens "1.9.0"
- web3-eth-iban "1.9.0"
- web3-eth-personal "1.9.0"
- web3-net "1.9.0"
- web3-utils "1.9.0"
-
-web3-net@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.9.0.tgz#ee8799bf766039aa5b157d6db0be5ffdecd39d64"
- integrity sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg==
- dependencies:
- web3-core "1.9.0"
- web3-core-method "1.9.0"
- web3-utils "1.9.0"
-
-web3-providers-http@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.9.0.tgz#93cd3eb42fff974c9f7634ede1a9795d6435c3fe"
- integrity sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ==
- dependencies:
- abortcontroller-polyfill "^1.7.3"
- cross-fetch "^3.1.4"
- es6-promise "^4.2.8"
- web3-core-helpers "1.9.0"
-
-web3-providers-ipc@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.9.0.tgz#db486cb0dde9062ac6055478861e3d37535924d2"
- integrity sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA==
- dependencies:
- oboe "2.1.5"
- web3-core-helpers "1.9.0"
-
-web3-providers-ws@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.9.0.tgz#568330766e8abbb6eb43e1153a72fb24398fcb7e"
- integrity sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w==
- dependencies:
- eventemitter3 "4.0.4"
- web3-core-helpers "1.9.0"
- websocket "^1.0.32"
-
-web3-shh@1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.9.0.tgz#75a37cd9f78d485ee5f018e2e66853e1e1c6ce4f"
- integrity sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg==
- dependencies:
- web3-core "1.9.0"
- web3-core-method "1.9.0"
- web3-core-subscriptions "1.9.0"
- web3-net "1.9.0"
-
-web3-utils@1.9.0, web3-utils@^1.8.1:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.9.0.tgz#7c5775a47586cefb4ad488831be8f6627be9283d"
- integrity sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==
- dependencies:
- bn.js "^5.2.1"
- ethereum-bloom-filters "^1.0.6"
- ethereumjs-util "^7.1.0"
- ethjs-unit "0.1.6"
- number-to-bn "1.7.0"
- randombytes "^2.1.0"
- utf8 "3.0.0"
-
-web3@^1.8.1:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/web3/-/web3-1.9.0.tgz#4fde5d134f8ee11355ed5bfa1bb41f8bc58e23f3"
- integrity sha512-E9IvVy/d2ozfQQsCiV+zh/LmlZGv9fQxI0UedDVjm87yOKf4AYbBNEn1iWtHveiGzAk2CEMZMUzAZzaQNSSYog==
- dependencies:
- web3-bzz "1.9.0"
- web3-core "1.9.0"
- web3-eth "1.9.0"
- web3-eth-personal "1.9.0"
- web3-net "1.9.0"
- web3-shh "1.9.0"
- web3-utils "1.9.0"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
-websocket@^1.0.32:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
- integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
- dependencies:
- bufferutil "^4.0.1"
- debug "^2.2.0"
- es5-ext "^0.10.50"
- typedarray-to-buffer "^3.1.5"
- utf-8-validate "^5.0.2"
- yaeti "^0.0.6"
-
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-which-typed-array@^1.1.2:
- version "1.1.9"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
- integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
- dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.0"
- is-typed-array "^1.1.10"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-ws@7.4.6:
- version "7.4.6"
- resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
- integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
-
-ws@^3.0.0:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
- integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
- dependencies:
- async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
- ultron "~1.1.0"
-
-xhr-request-promise@^0.1.2:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c"
- integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==
- dependencies:
- xhr-request "^1.1.0"
-
-xhr-request@^1.0.1, xhr-request@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed"
- integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==
- dependencies:
- buffer-to-arraybuffer "^0.0.5"
- object-assign "^4.1.1"
- query-string "^5.0.1"
- simple-get "^2.7.0"
- timed-out "^4.0.1"
- url-set-query "^1.0.0"
- xhr "^2.0.4"
-
-xhr@^2.0.4, xhr@^2.3.3:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d"
- integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==
- dependencies:
- global "~4.4.0"
- is-function "^1.0.1"
- parse-headers "^2.0.0"
- xtend "^4.0.0"
-
-xtend@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-yaeti@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
- integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==
-
-yallist@^3.0.0, yallist@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
diff --git a/linkchecker-config.json b/linkchecker-config.json
new file mode 100644
index 00000000..1d8c501b
--- /dev/null
+++ b/linkchecker-config.json
@@ -0,0 +1,13 @@
+{
+ "ignorePatterns": [
+ {
+ "pattern": "^https://x.com"
+ },
+ {
+ "pattern": "^https://linkedin.com"
+ },
+ {
+ "pattern": "^https://dune.com"
+ }
+ ]
+}
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100644
index 00000000..4f11a03d
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/next.config.js b/next.config.js
new file mode 100644
index 00000000..54d5ff8b
--- /dev/null
+++ b/next.config.js
@@ -0,0 +1,47 @@
+const redirections = require('./redirects.json')
+const withNextra = require('nextra')({
+ theme: 'nextra-theme-docs',
+ themeConfig: './theme.config.tsx',
+ latex: true
+})
+
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ output: 'export',
+ images: {
+ unoptimized: true
+ },
+ webpack (config) {
+ config.module.rules.push({
+ test: /\.svg$/i,
+ issuer: { and: [/\.(js|ts|md)x?$/] },
+ use: [
+ {
+ loader: '@svgr/webpack',
+ options: {
+ prettier: false,
+ svgo: false,
+ svgoConfig: {
+ plugins: [
+ {
+ name: 'preset-default',
+ params: {
+ overrides: { removeViewBox: false }
+ }
+ }
+ ]
+ },
+ titleProp: true
+ }
+ }
+ ]
+ })
+
+ return config
+ },
+ async redirects () {
+ return redirections
+ }
+}
+
+module.exports = withNextra(nextConfig)
diff --git a/other/README.md b/other/README.md
deleted file mode 100644
index f6b724a6..00000000
--- a/other/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# ✅ Why build on Safe?
-
-There are a few key reasons why you might want to consider building your application on top of Safe's smart contract account standard. Overall, building your application on top of Safe can provide a range of benefits, including enhanced security, improved user experience, and greater flexibility and integration.
-
-Multi-signature control is the tip of the iceberg and Safe accounts unlock a wide range of possibilities for new form of custody, ownership, and identity.
-
-
-
-#### High security
-
-Safe's **multi-signature** functionality allows you to define a list of owner accounts and a threshold number of accounts required to confirm a transaction. Once the threshold of owner accounts have confirmed a transaction, the Safe transaction can be executed. Owners can either be EOAs or other smart contract accounts.
-
-#### Advanced execution logic
-
-It is possible to make use of different **Safe Library contracts** to perform complex transactions. A very common example of this is **batched transactions** where multiple simple Ethereum transactions are combined and executed at once. That means instead of having to sign several transactions sequentially, a user just needs to sign one batched transaction.
-
-#### Advanced access management
-
-You can add **Safe Modules** to your Safe. Thereby it is possible to implement more fine-grained access management. For instance, it is possible to define a module that can only be used to **recover access** to a Safe under specific circumstances. A popular version of this is the **Social Recovery Module**. A different example is the **allowance module** that allow owners of a Safe to grant limited execution permission, such as a daily limit to external accounts.
-
-#### Token callback support
-
-Many new tokens require wallet contracts to implement callbacks. Token standards like **ERC721** and **ERC1155** allow contracts to immediately react to receiving tokens through these and make it even possible to reject the transfer completely.
-
-#### Ether-less accounts
-
-Another core functionality of the Safe is **token payment**. Generally, Ethereum transactions require ETH for paying transaction fees (“gas”). With the Safe, users can pay transaction fees in a number of supported ERC20 tokens. This is realized via a transaction relay service that accepts those tokens and submits the transactions to the blockchain, therefore paying the gas fee in ETH. With the same functionality, Ether-less transactions can be implemented, where a 3rd party pays transaction fees on behalf of a Gnosis Safe via the same relay service.
diff --git a/other/built-on-safe.md b/other/built-on-safe.md
deleted file mode 100644
index 5ce985da..00000000
--- a/other/built-on-safe.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Built on Safe
-
-Projects building on Safe.
-
-If you know any projects missing on this list, please let us know [on Discord](https://chat.safe.global) or Twitter [@safe](https://twitter.com/safe).
-
-## [Safe Ecosystem Map](https://twitter.com/safe/status/1620017821714624518)
-
-
-
-## [Hackathon Winners](https://safe-global.notion.site/6b4fe0e6c2bc49cb9c19f24d00ac02c0?v=29b399efc934443e874fba70175f8630)
-
-
diff --git a/other/other-tools.md b/other/other-tools.md
deleted file mode 100644
index 5c787971..00000000
--- a/other/other-tools.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Tools, Frameworks, and Extensions
-
-The Safe Team and the community has created a few helpful tools, services and frameworks.
-
-[Safe CLI](https://github.com/gnosis/safe-cli) is a command-line utility used to interact with the Safe Contracts.
-
-[Safe Tasks](https://github.com/gnosis/safe-tasks/) is a Hardhat task collection for the Safe contracts.
-
-[Scaffold-ETH Safe Starter Kit](https://github.com/scaffold-eth/scaffold-eth/tree/gnosis-starter-kit) is a fork of the Scaffold-ETH framework integrated with the [Safe Core SDK](safe-core/safe-core-account-abstraction-sdk/protocol-kit/core-sdk.md) to allow for the rapid prototyping of new UIs and user experiences.
-
-[Ape Safe](https://safe.ape.tax) is a tool built by Yearn.Finance's [Banteg](https://github.com/banteg) used to build and execute multiple transactions safely by previous the state change on a local blockchain before executing the transaction.
-
-[Zodiac](https://github.com/gnosis/zodiac) is a series of tools to extend a Safe for DAO governance and treasury management.
-
-Safe [DID](https://github.com/ceramicnetwork/CIPs/blob/main/CIPs/cip-101.md) is a method that converts a Safe instance into a DID
diff --git a/other/things-you-can-do-with-safe.md b/other/things-you-can-do-with-safe.md
deleted file mode 100644
index d67cdc11..00000000
--- a/other/things-you-can-do-with-safe.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Things you can do with Safe
-
-Safe accounts are built to be fully customizable. This means that the only limit to what you can do with a Safe account is your imagination.
-
-
-
-### Live features
-
-* [Multisig](https://help.safe.global/en/articles/40863-signature-policies): Require multiple signing accounts to approve a transaction before executing.
-* [Spending policies](https://help.safe.global/en/articles/40842-set-up-and-use-spending-limits): Limit the amount that a signing account can withdraw from a Safe.
-* Automation
- * Scheduling transactions: Automatically execute transactions on a schedule.
-* Access controls
- * Roles and permissions: Set specific rules on what types of actions certain accounts can perform.
- * Apps and permissions: Set specific rules on what types of actions certain apps can perform.
- * Hybrid custody
-* Recovery mechanisms: Allow owners to recover access to their Safe if they lose a primary key.
-* Hierarchies: Different permission sets based on roles within an organization.
-* Transaction batching: Send multiple transactions at once.
-* [Gas abstraction](safe-core-sdk/relay-kit/README.md): Pay for transaction fees using ERC-20 tokens.
-* Ethereum staking: [Stake ETH with Confidence: How to Use Safe Smart Accounts for Ethereum Validators](https://help.safe.global/en/articles/71879-stake-eth-with-confidence-how-to-use-safe-smart-accounts-for-ethereum-validators)
-* Security
- * Allow & deny lists
- * Fraud monitoring
- * Post-quantum signature schemes
-
-## Protocols
-
-- Ethereum and 12 other layer 1 (L1) and test networks
-- ERC-20s
-- Layer two (L2) accounts based on smart contracts
-
-## Layer 2s (L2s)
-
-#### About
-
-- Requires creating a new Safe on each network
-- Make sure to use the correct token contract for the given Layer 2 (L2)
-
-#### Types
-
-- Arbitrum
-- [Optimism](https://dune.com/safe/optimism)
-- [Polygon](https://dune.com/safe/polygon)
-- [xDAI](https://dune.com/safe/gnosis-chain) (Gnosis Chain)
-- AVAX
-- [BSC](https://dune.com/safe/bsc)
-- EWC
-
-#### Multichain strategy
-
-- Enable the features of programmable accounts without interacting directly with the contracts.
- - [Account Abstraction is NOT coming](https://safe.mirror.xyz/9KmZjEbFkmI79s28d9xar6JWYrE50F5AHpa5CR12YGI)
-- Use a universal readable name/ID to interact across many protocols.
- - E.g. Ethereum Name Service (ENS) maps the name/ID to each chain-specific address.
- - [Account Abstraction in a Multichain Landscape - Part 1: Addresses](https://safe.mirror.xyz/4GcGAOFno-suTCjBewiYH4k4yXPDdIukC5woO5Bjc4w)
-
-## Which Safe tool should I use?
-
-Here is a diagram to help you decide which tool to use.
-
-
diff --git a/other/what-is-a-smart-account.md b/other/what-is-a-smart-account.md
deleted file mode 100644
index d10be7c9..00000000
--- a/other/what-is-a-smart-account.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: >-
- Everything you need to know about Smart Contracts Accounts and how to build
- with them.
----
-
-# What is a Smart Account?
-
-A Smart Account (aka Smart Contract Account) is a fully customizable account. If you think of your regular bank account or crypto account, it uses keys to sign transactions. This means that anyone with the key (password, private key) can sign transactions and approve sending money out of your account.
-
-If someone gained access to your username and password, they would have access to all your money. If you forgot your password, then you have to go through a lengthy password reset process with a regular bank account. If it's a crypto account, your money is gone forever.
-
-A Smart Account is fully customizable, which means you can create any type of rule you want. The most common type of rule you can create is a multiple-signer account (also known as a multi-sig). For example, instead of having just one private key authorized to sign on behalf of your account, you can require multiple signers. For example, you can add 2 other people you trust to be signers of your account. Then if you want to send any transactions, at least 2 of them have to approve the transaction.
-
-Another common rule is to set a spending limit. You can set a limit that allows you to withdraw amounts under $100, without needing approval from everyone else. However, for larger amounts, you could require 2 other people to sign and approve the transaction.
-
-When you change the very idea of an account from something that is simply using a password or private key to approve transactions, to something that is fully customizable from the ground up, the possibilities are endless. This guide will show you some of the possibilities and give you the resources to make those possibilities a reality.
-
-### Smart Accounts vs Signing Accounts
-
-The account that uses a key to sign transactions is a signing account. It's also known as an Externally Owned Account (EOA).
-
-
-
-
-
-A common misconception is that all Smart Accounts are multi-sig accounts. This isn't true. A multi-sig account is a specific type of Smart Account that requires multiple signing accounts to approve transactions. In fact, the [most common Smart Account configuration is a 1/1](https://twitter.com/tomiwa1a/status/1619059531480444933). This means that only one signer is required for the account. Why would someone create a smart account that only has one signer? Martin Köppelmann has a [great thread explaining this](https://twitter.com/koeppelmann/status/1618998969992097793). In summary:
-
-1. Swap keys if your private key is compromised
- * This won't work if a hacker has your private keys since they can also swap the keys. However, if you leak your private keys, you can change the owner before other people find it, without having to move all your assets.
-2. Pay for transactions using any ERC20 tokens or even cash. The relayer pays for gas on your behalf
-3. Add customizable rules such as spending limits
-
-### Further reading
-
-1. [Safe{Core} Account Abstraction SDK](safe-core-sdk/introduction.md)
-2. [Safe Modules](safe-core-protocol/modules.md)
-3. [Safe Guards](safe-core-protocol/guards.md)
diff --git a/other/workshops.md b/other/workshops.md
deleted file mode 100644
index 1d3f259c..00000000
--- a/other/workshops.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Workshops
-
-- [ETHTokyo 2023 - How to Make a Group Wallet to Buy Things with Frens using Safe{Core} Account Abstraction SDK](https://www.youtube.com/watch?v=Vgfgr-oNLMk&t=8360s) ([slides](https://docs.google.com/presentation/d/1menJOy_Hk3dS89VmpDU_ZxJcM90Set3ozNRZgBYJWy8/edit?usp=sharing))
-- [ETHIndia 2022 - Safe Core SDK 🛠 Managing Safe Modules and Guards](https://www.youtube.com/watch?v=ppwE9GXC5MA) ([slides](https://docs.google.com/presentation/d/1hw4S0bna-9cit-oiZkAh11mk_rse6zqTebXJiRRfUc4/edit?usp=sharing))
-- [HackMoney 2022 - Safe modding 101: Create your own Safe Module](https://www.youtube.com/watch?v=QdOfuxxXVBA)
-- [ETHDenver 2021 - Technical Introduction to the Safe Apps SDK](https://www.youtube.com/watch?v=QG94GpCE0p0)
-- [Hello Decentralization 2021 - Technical Introduction to the Safe Apps SDK](https://www.crowdcast.io/e/hello-decentralization/49)
-- [ETHOnline 2020 - Introduction to building with Safe Apps SDK & Contract Proxy Kit](https://www.youtube.com/watch?v=YGw8WfBw5OI)
-- [TruffleCon 2020 - Leverage Smart Contract Accounts for Your Dapp](https://www.youtube.com/watch?v=J_3BpQGTLeI)
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..14a63005
--- /dev/null
+++ b/package.json
@@ -0,0 +1,67 @@
+{
+ "version": "4.0.0",
+ "description": "Safe docs",
+ "scripts": {
+ "build": "next build",
+ "dev": "next dev",
+ "generate-supported-networks": "node .github/scripts/generateSupportedNetworks.js",
+ "linkcheck": "find ./pages -name '*.md*' -print0 | xargs -0 -n1 pnpm markdown-link-check --quiet --progress --config linkchecker-config.json",
+ "lint": "eslint . && vale . --minAlertLevel=error",
+ "start": "serve out",
+ "test": "env-cmd cypress run --headless",
+ "typecheck": "tsc --noEmit --incremental false",
+ "prepush": "pnpm lint && pnpm typecheck",
+ "prepare": "husky install"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/safe-global/safe-docs.git"
+ },
+ "author": "Safe Core Contributors ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/safe-global/safe-docs/issues"
+ },
+ "homepage": "https://github.com/safe-global/safe-docs#readme",
+ "dependencies": {
+ "@emotion/cache": "^11.11.0",
+ "@emotion/react": "^11.11.1",
+ "@emotion/styled": "^11.11.0",
+ "@mui/material": "^5.14.18",
+ "@preact/signals": "^1.2.2",
+ "@svgr/webpack": "^8.1.0",
+ "cypress": "^13.6.3",
+ "fuse.js": "^7.0.0",
+ "markdown-link-check": "^3.11.2",
+ "next": "^14.0.3",
+ "nextra": "2.13.2",
+ "nextra-theme-docs": "2.13.2",
+ "node-fetch": "^3.3.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-ga4": "^2.1.0",
+ "shelljs": "^0.8.5"
+ },
+ "devDependencies": {
+ "@next/eslint-plugin-next": "^14.0.4",
+ "@types/node": "18.11.10",
+ "@types/react": "18.2.37",
+ "@typescript-eslint/eslint-plugin": "^6.15.0",
+ "@typescript-eslint/parser": "^6.15.0",
+ "env-cmd": "^10.1.0",
+ "eslint": "^8.56.0",
+ "eslint-config-next": "^14.0.4",
+ "eslint-config-standard": "^17.1.0",
+ "eslint-config-standard-jsx": "^11.0.0",
+ "eslint-config-standard-with-typescript": "^43.0.0",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^16.5.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-security": "^2.1.0",
+ "husky": "^8.0.3",
+ "serve": "^14.2.1",
+ "typescript": "^4.9.3"
+ }
+}
diff --git a/pages/404.md b/pages/404.md
new file mode 100644
index 00000000..0211747c
--- /dev/null
+++ b/pages/404.md
@@ -0,0 +1,7 @@
+# 404 Error - Page not found
+
+This page couldn't be found.
+
+Please check the URL or head back to the [homepage](/).
+
+If you think something is broken, please report a problem on [GitHub](https://github.com/safe-global/safe-docs/issues/new).
diff --git a/pages/_app.tsx b/pages/_app.tsx
new file mode 100644
index 00000000..7c9d99ec
--- /dev/null
+++ b/pages/_app.tsx
@@ -0,0 +1,52 @@
+import type { ReactElement } from 'react'
+import type { AppProps } from 'next/app'
+import {
+ Experimental_CssVarsProvider as CssVarsProvider,
+ experimental_extendTheme as extendMuiTheme
+} from '@mui/material/styles'
+import { CssBaseline } from '@mui/material'
+import { CacheProvider } from '@emotion/react'
+import type { EmotionCache } from '@emotion/react'
+import ReactGA from 'react-ga4'
+
+import { createEmotionCache } from '../styles/emotion'
+import { theme } from '../styles/theme'
+import '../styles/styles.css'
+
+// Client-side cache, shared for the whole session of the user in the browser.
+const clientSideEmotionCache = createEmotionCache()
+
+// Extended theme for CssVarsProvider
+const cssVarsTheme = extendMuiTheme(theme)
+
+const GoogleAnalytics: React.FC = () => {
+ if (typeof window === 'undefined') return null
+ if (process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID === undefined) return null
+ ReactGA.initialize(process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_TRACKING_ID, {
+ gaOptions: {
+ cookieFlags: 'SameSite=Strict;Secure',
+ cookieDomain: process.env.GOOGLE_ANALYTICS_DOMAIN
+ }
+ })
+ return null
+}
+
+const App = ({
+ Component,
+ pageProps,
+ emotionCache = clientSideEmotionCache
+}: AppProps & {
+ emotionCache?: EmotionCache
+}): ReactElement => {
+ return (
+
+
+
+
+
+
+
+ )
+}
+
+export default App
diff --git a/pages/_meta.json b/pages/_meta.json
new file mode 100644
index 00000000..7341c0bd
--- /dev/null
+++ b/pages/_meta.json
@@ -0,0 +1,65 @@
+{
+ "-- Getting Started": {
+ "type": "separator",
+ "title": "Getting Started"
+ },
+ "what-is-safe": "What is Safe?",
+ "-- Safe Smart Account": {
+ "type": "separator",
+ "title": "Safe Smart Account"
+ },
+ "smart-account-overview": "Overview",
+ "smart-account-modules": "Safe Modules",
+ "smart-account-guards": "Safe Guards",
+ "smart-account-audits": "Audits",
+ "smart-account-signatures": "Signatures",
+ "smart-account-supported-networks": "Supported Networks",
+ "-- Safe{Core} AA SDK": {
+ "type": "separator",
+ "title": "Safe{Core} AA SDK"
+ },
+ "sdk-overview": "Overview",
+ "sdk-auth-kit": "Auth Kit",
+ "sdk-protocol-kit": "Protocol Kit",
+ "sdk-onramp-kit": "Onramp Kit",
+ "sdk-relay-kit": "Relay Kit",
+ "sdk-api-kit": "API Kit",
+ "-- Safe{Core} Protocol": {
+ "type": "separator",
+ "title": "Safe{Core} Protocol"
+ },
+ "protocol-overview": "Overview",
+ "-- Safe{Core} API": {
+ "type": "separator",
+ "title": "Safe{Core} API"
+ },
+ "api-service-architecture": "Service Architecture",
+ "api-rpc-requirements": "RPC Requirements",
+ "api-supported-networks": "Supported Networks",
+ "-- Safe Apps SDK": {
+ "type": "separator",
+ "title": "Safe Apps SDK"
+ },
+ "apps-sdk-overview": "Overview",
+ "apps-sdk-get-started": "Get Started",
+ "apps-sdk-release": "Release",
+ "-- Miscellaneous": {
+ "type": "separator",
+ "title": "Miscellaneous"
+ },
+ "glossary": "Glossary",
+ "resource-hub": {
+ "title": "Resource Hub",
+ "type": "page",
+ "theme": {
+ "layout": "raw"
+ }
+ },
+ "bug-bounty": "Bug Bounty",
+ "support": {
+ "title": "Support ↗",
+ "type": "page",
+ "href": "https://ethereum.stackexchange.com/questions/tagged/safe-core",
+ "newWindow": true
+ }
+}
diff --git a/safe-core-api/rpc-requirements.md b/pages/api-rpc-requirements.md
similarity index 53%
rename from safe-core-api/rpc-requirements.md
rename to pages/api-rpc-requirements.md
index 8268b7f0..53357999 100644
--- a/safe-core-api/rpc-requirements.md
+++ b/pages/api-rpc-requirements.md
@@ -1,17 +1,17 @@
# RPC Requirements
-### What are the RPC requirements for the tx service?
+### What are the RPC requirements for the Transaction Service?
-To run the tx service in **tracing mode** you will need a tracing compatible node:
+To run the Transaction Service in **tracing mode** you will need a tracing compatible node:
* [Erigon ](https://github.com/ledgerwatch/erigon)node (recommended).
* Deprecated [OpenEthereum ](https://github.com/openethereum/openethereum)node with tracing enabled (`--tracing` flag) if it's still supported on your network.
* [Nethermind ](https://nethermind.io/)(**archive mode** so tracing is enabled).
* **Any RPC** that supports **eth_getLogs** if using the **Safe L2 Version.** From Safe **v1.3.0** there's an alternative and **recommended way** to avoid using tracing, the **L2 Safe version** ([https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json](https://github.com/safe-global/safe-deployments/blob/main/src/assets/v1.3.0/gnosis_safe_l2.json)) that emits events, so no tracing node is required. This is the approach used in networks like _Polygon_ or _Binance Smart Chain_ where fees are cheap and emitting events don't impact the user:
- * A tx service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts.
- * A tx service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode should not be changed after initializing the service, as the database could become corrupted, so if a tracing node was not set up it shouldn't be added later. The opposite is also problematic.
+ * A Transaction Service configured **with a tracing** node can index L2 and non L2 versions of the Safe contracts.
+ * A Transaction Service configured **without a tracing** node can only index L2 versions of the Safe contracts. Indexing mode shouldn't be changed after initializing the service, as the database could become corrupted, so if a tracing node wasn't set up it shouldn't be added later. The opposite is also problematic.
-### What RPC methods are used?
+### What RPC methods are used?
For indexing, basic RPC methods are required, and the service uses _batching_ to query the RPC:
@@ -30,18 +30,18 @@ For the regular version of the Safe (not L2), tracing endpoints are used:
For the L2 version of the Safe, no special RPC methods are used. The most demanding one will be [eth_getLogs](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) to get the Safe events.
-### How many queries will the tx service do to the RPC?
+### How many queries will the Transaction Service do to the RPC?
-That's not written in stone. Tx service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works.Indexer tries to process a low number of blocks (currently 50). Depending on that:
+That's not written in stone. Transaction Service has some environment variables that can be configured to set a limit on the number of blocks that are processed together (`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`), but the default behaviour is trying to detect the best configuration for every network similar to how [TCP congestion control](https://en.wikipedia.org/wiki/TCP_congestion_control) works. Indexer tries to process a low number of blocks (currently 50). Depending on that:
-* If request takes **less than 1 second**, node can process more. Number of blocks to fetch is duplicated for the next request.
-* If request takes **less than 3 seconds**, number of blocks to process are incremented by an small amount (currently 20).
-* If request takes **more than 20 seconds**, number of blocks to process are decremented by an small amount (currently 20).
-* If request takes **more than 30 seconds**, number of blocks to process are halved.
+* If the request takes **less than 1 second**, the node can process more. The number of blocks to fetch is duplicated for the next request.
+* If the request takes **less than 3 seconds**, the number of blocks to process is incremented by a small amount (currently 20).
+* If the request takes **more than 20 seconds**, the number of blocks to process is decremented by a small amount (currently 20).
+* If the request takes **more than 30 seconds**, the number of blocks to process is halved.
* If there is **an exception** when requesting the information (I/O error) number of blocks to process is reset to the minimum number of blocks (currently 1).
* All this happens in every request to the node used for indexing (safe transactions, erc20/721 events...).
-Be careful, some nodes like **Binance Smart Chain** public nodes have a hardcoded limit of blocks they can process (_5000_ in the case of BSC). Set`ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX`to prevent the algorithm trying to process more blocks and erroring all the time
+Be careful, some nodes like **Binance Smart Chain** public nodes have a hard-coded limit of blocks they can process (_5000_ in the case of BSC). Set `ETH_EVENTS_BLOCK_PROCESS_LIMIT_MAX` to prevent the algorithm from trying to process more blocks and raise errors all the time
## **RPC Provider expectations**
@@ -50,4 +50,4 @@ For RPC providers we expect communication on every update and configuration chan
* **Timeout** for the requests.
* **Number of** **batch requests** allowed in the same HTTP request.
* **Block range** that can be queried in queries like **eth_getLogs** or **trace_filter.**
-* **Results limit for endpoints** (e.g. some providers implement a limit to the number of results of queries like **eth_getLogs**). Indexer is expecting a failure and not getting capped results.
+* **Results limit for endpoints** (for example some providers implement a limit to the number of results of queries like **eth_getLogs**). Indexer is expecting a failure and not getting capped results.
diff --git a/safe-core-api/service-architecture.md b/pages/api-service-architecture.md
similarity index 67%
rename from safe-core-api/service-architecture.md
rename to pages/api-service-architecture.md
index 2b3b70ff..2c265b41 100644
--- a/safe-core-api/service-architecture.md
+++ b/pages/api-service-architecture.md
@@ -9,15 +9,15 @@ The Safe infrastructure consists of four services:
* [Safe Transaction Service](https://github.com/safe-global/safe-transaction-service): Keeps track of transactions related to Safe contracts (Python). Also referred to as *Transaction Service*.
* [Safe Events Service](https://github.com/safe-global/safe-events-service): Handles Safe indexing events from the Transaction Service and delivers them as HTTP webhooks.
* [Safe Config Service](https://github.com/safe-global/safe-config-service): Keeps track of all supported networks and chain-specific variables (Python). Also referred to as *Config Service*.
-* [Safe Client Gateway](https://github.com/safe-global/safe-client-gateway-nest): Uses the config service to find the transaction service instance required for a given request (Node.js). Also referred to as *Client Gateway*.
+* [Safe Client Gateway](https://github.com/safe-global/safe-client-gateway-nest): Uses the config service to find the Transaction Service instance required for a given request (Node.js). Also referred to as *Client Gateway*.
Safe's production setup is a mixture of several instances of the Safe Transaction Service orchestrated by the Config Service, later consumed by the Client Gateway.
-
+
## Safe Transaction Service
-The Transaction Service uses tracing in Mainnet/Goerli and Gnosis Chain and event indexing in other chains to keep track of transactions related to Safe contracts. One instance of the Transaction Service runs per supported network (Mainnet, Goerli, Gnosis Chain, Polygon, etc.).
+The Transaction Service uses tracing in Mainnet/Sepolia and Gnosis Chain and event indexing in other chains to keep track of transactions related to Safe contracts. One instance of the Transaction Service runs per supported network (Mainnet, Sepolia, Gnosis Chain, Polygon, etc.).
## Safe Config Service
@@ -25,11 +25,11 @@ The Config Service keeps track of all the supported networks and all the availab
## Safe Client Gateway
-The Client Gateway leverages the config service to find the transaction service instance required for a specific request. The client gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients.
+The Client Gateway leverages the config service to find the Transaction Service instance required for a specific request. The Client Gateway forwards the request to the specified Transaction Service instance for the supported networks (determined by the Config Service). The Client Gateway transforms, aggregates, and caches information from the Config and Transaction Services, optimizing data for Safe's web and mobile clients.
-
+
-Even though Safe Config and Transaction Service instances are reachable by clients that are not the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client.
+Even though Safe Config and Transaction Service instances are reachable by clients that aren't the Client Gateway, this may change in the future. The Client Gateway is the outermost component of the Safe infrastructure and should be the single point of communication with any frontend client.
## Running locally
diff --git a/safe-core-api/safe-transaction-service.md b/pages/api-service-architecture/safe-transaction-service.mdx
similarity index 91%
rename from safe-core-api/safe-transaction-service.md
rename to pages/api-service-architecture/safe-transaction-service.mdx
index f3c1f330..722827c3 100644
--- a/safe-core-api/safe-transaction-service.md
+++ b/pages/api-service-architecture/safe-transaction-service.mdx
@@ -20,7 +20,7 @@ Safe Transaction Service is a [Django](https://www.djangoproject.com/) app writt
- [Redis](https://redis.com/): An open source, in-memory data structure store used for caching by the Safe Transaction Service.
- [safe-eth-py](https://github.com/safe-global/safe-eth-py): A library to interact with Safe and blockchains.
-
+
## Blockchain indexing
@@ -35,7 +35,7 @@ For L1 chains, the indexer calls tracing methods. For the oldest blocks, [`trace
For L2 chains, the indexing is by events with the [`eth_getLogs`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getlogs) method with the corresponding topics.
-From Safe creation, the transaction service stores each contract change on the `SafeStatus` model as `nonce`, `owners`, etc. The latest and current status of a Safe is stored as `SafeLastStatus` for easy database access and optimization.
+From Safe creation, the Transaction Service stores each contract change on the `SafeStatus` model as `nonce`, `owners`, etc. The latest and current status of a Safe is stored as `SafeLastStatus` for easy database access and optimization.
The following endpoints show the current indexing status of the Safe Transaction Service:
- `/v1/about/indexing/`
@@ -83,17 +83,17 @@ sequenceDiagram
SafeTransactionService->>-B: Http(201) {Created}
```
-**What is the `safe_tx_hash`?**
+**What's the `safe_tx_hash`?**
`safe_tx_hash` is the unique identifier for a Safe transaction and is calculated using the [EIP-712](https://eips.ethereum.org/EIPS/eip-712) standard:
`keccak256(0x19 || 0x1 || domainSeparator || safeTxHashStruct)`
where `safeTxHashStruct` is the `hashStruct` of a Safe transaction.
-The following example shows how to get a `safe_tx_hash` with [`safe-eth-py`](https://pypi.org/project/safe-eth-py/) with the parameter of the next transaction [0x34ae46cf7d884309a438a7e9a3161fa05dfc5068681ac3877a947971af845a18](https://safe-transaction-goerli.safe.global/api/v1/multisig-transactions/0x34ae46cf7d884309a438a7e9a3161fa05dfc5068681ac3877a947971af845a18/)
+The following example shows how to get a `safe_tx_hash` with [`safe-eth-py`](https://pypi.org/project/safe-eth-py/)
```python
from gnosis.safe.safe_tx import SafeTx
from gnosis.eth.ethereum_client import EthereumClient
-eth_client = EthereumClient("https://rpc.goerli.eth.gateway.fm")
+eth_client = EthereumClient("https://sepolia.gateway.tenderly.co")
safe_tx = SafeTx(eth_client, "0x4127839cdf4F73d9fC9a2C2861d8d1799e9DF40C", "0xc6b82bA149CFA113f8f48d5E3b1F78e933e16DfD",10000000000000000,"",0,0,0,0,"0x0000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000", safe_nonce=206)
print(safe_tx.safe_tx_hash.hex())
```
@@ -144,12 +144,12 @@ message = "Hello SafeMessages"
# Hash EIP-191
message_hash = defunct_hash_message(text=message)
# get message hash from safe
-eth_client = EthereumClient("https://rpc.goerli.eth.gateway.fm")
+eth_client = EthereumClient("https://sepolia.gateway.tenderly.co")
safe_address = "TheAliceAndBobSafeAddress"
safe = Safe(safe_address, eth_client)
safe_message_hash = safe.get_message_hash(message_hash)
-# Alice is going to create the message on safe transaction service
+# Alice is going to create the message on safe Transaction Service
# First sign the safe_message_hash
signature_alice = alice.signHash(safe_message_hash)
@@ -159,10 +159,10 @@ body = {
"safeAppId": 0,
"signature": signature_alice.signature.hex()
}
-requests.post(f'https://safe-transaction-goerli.safe.global/api/v1/safes/{safe_address}/messages/',json=body)
+requests.post(f'https://safe-transaction-sepolia.safe.global/api/v1/safes/{safe_address}/messages/',json=body)
# Message was created, let's request by message hash
-response = requests.get(f'https://safe-transaction-goerli.safe.global/api/v1/messages/{safe_message_hash.hex()}/')
+response = requests.get(f'https://safe-transaction-sepolia.safe.global/api/v1/messages/{safe_message_hash.hex()}/')
print(response.json())
# Adding Bob confirmation
@@ -173,7 +173,7 @@ signature_bob = bob.signHash(safe_message_hash)
body = {
"signature": signature_bob.signature.hex()
}
-requests.post(f'https://safe-transaction-goerli.safe.global/api/v1/messages/{safe_message_hash.hex()}/signatures/',json=body)
+requests.post(f'https://safe-transaction-sepolia.safe.global/api/v1/messages/{safe_message_hash.hex()}/signatures/',json=body)
```
@@ -197,7 +197,7 @@ Supported and configured networks on `safe-eth-py`:
**Example transaction decoder**
```bash
curl -X 'POST' \
- 'https://safe-transaction-goerli.safe.global/api/v1/data-decoder/' \
+ 'https://safe-transaction-sepolia.safe.global/api/v1/data-decoder/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-CSRFToken: Gx1aRa8kIJGIAfReLAWwr9Q6dHv22dFt7VprdipLryHcxpfhk9aV0UDAhNz8gGYz' \
diff --git a/safe-core-api/available-services.md b/pages/api-supported-networks.md
similarity index 84%
rename from safe-core-api/available-services.md
rename to pages/api-supported-networks.md
index b2e6601a..977af195 100644
--- a/safe-core-api/available-services.md
+++ b/pages/api-supported-networks.md
@@ -1,8 +1,8 @@
---
-description: This pages provides an overview of the available services
+description: This page provides an overview of the available services
---
-# Available Services
+# Supported Networks
## Safe Transaction Service
@@ -12,13 +12,13 @@ description: This pages provides an overview of the available services
| Aurora | [https://safe-transaction-aurora.safe.global](https://safe-transaction-aurora.safe.global/) |
| Avalanche | [https://safe-transaction-avalanche.safe.global](https://safe-transaction-avalanche.safe.global/) |
| Base | [https://safe-transaction-base.safe.global](https://safe-transaction-base.safe.global) |
-| Base Goerli | [https://safe-transaction-base-testnet.safe.global](https://safe-transaction-base-testnet.safe.global/) |
+
| BNB Smart Chain | [https://safe-transaction-bsc.safe.global](https://safe-transaction-bsc.safe.global/) |
| Celo | [https://safe-transaction-celo.safe.global](https://safe-transaction-celo.safe.global/) |
| Ethereum Mainnet | [https://safe-transaction-mainnet.safe.global](https://safe-transaction-mainnet.safe.global/) |
| Gnosis Chain | [https://safe-transaction-gnosis-chain.safe.global](https://safe-transaction-gnosis-chain.safe.global/) |
-| Goerli | [https://safe-transaction-goerli.safe.global](https://safe-transaction-goerli.safe.global/) |
| Optimism | [https://safe-transaction-optimism.safe.global](https://safe-transaction-optimism.safe.global/) |
| Polygon | [https://safe-transaction-polygon.safe.global](https://safe-transaction-polygon.safe.global/) |
| Polygon zkEVM | [https://safe-transaction-zkevm.safe.global](https://safe-transaction-zkevm.safe.global/) |
+| Sepolia | [https://safe-transaction-sepolia.safe.global](https://safe-transaction-sepolia.safe.global/) |
| zkSync Era Mainnet | [https://safe-transaction-zksync.safe.global](https://safe-transaction-zksync.safe.global/) |
diff --git a/pages/apps-sdk-get-started.md b/pages/apps-sdk-get-started.md
new file mode 100644
index 00000000..74acf4e6
--- /dev/null
+++ b/pages/apps-sdk-get-started.md
@@ -0,0 +1,122 @@
+---
+description: Basic resources to start creating Safe Apps
+---
+
+# Getting started
+
+Here are some resources to help you get started with building Safe Apps:
+
+* [Safe Apps SDK Packages](#safe-apps-sdk-packages)
+* [Basic Requirements](#basic-requirements)
+* [UI Kit](#ui-kit)
+
+## Safe Apps SDK packages
+
+Whether you already have a dapp or are considering creating a new one, you will find it useful to rely on one of our integrations to communicate with Safe{Wallet}. You will find integrations with common packages like `Web3Modal`, Blocknative onboard.js, and `web3-react` in these packages.
+
+For those creating a new dapp, using the [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to kickstart the basic structure with all the necessary configuration will speed up the process.
+
+## Basic requirements
+
+If you already have a dapp, some mandatory requirements exist to adapt your app to be used as a Safe App. Without this basic configuration, the dapp won't work with the Safe as expected.
+
+If you are using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to start your Safe App, these basic requirements are already satisfied.
+
+### Manifest
+
+It's mandatory that your app exposes a `manifest.json` file in the root directory with this structure:
+
+```json
+{
+ "name": "YourAppName",
+ "description": "A description of what your app does",
+ "iconPath": "myAppIcon.svg"
+}
+```
+
+**Note:** `iconPath` is the public relative path where Safe will try to load your app icon. For this example, it should be `https://yourAppUrl/myAppIcon.svg`.
+
+### CORS
+
+Safe needs to reach the `manifest.json` from the app. To allow this, it's required to enable *Cross Site Requests* by setting the *CORS* headers to the `manifest.json`.
+
+The required headers are:
+
+```
+"Access-Control-Allow-Origin": "\*",
+"Access-Control-Allow-Methods": "GET",
+"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
+```
+
+### React development
+
+It's possible to use the local React development server. For this, you need to set the *CORS* headers and use the same protocol (HTTP or HTTPS) as the Safe interface you use for testing.
+
+
+**CORS for development**
+
+For this, use [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). To enable the library, update the `scripts` section in the `package.json`:
+
+```json
+"scripts": {
+ "start": "react-app-rewired start",
+ "build": "react-app-rewired build",
+ "test": "react-app-rewired test"
+},
+```
+
+Also, create the `config-overrides.js` file in the project's root to configure the *CORS* headers. The content of the file should be:
+
+```js
+/* config-overrides.js */
+
+module.exports = {
+ // The function to use to create a webpack dev server configuration when running the development
+ // server with 'npm run start' or 'yarn start'.
+ // Example: set the dev server to use a specific certificate in https.
+ devServer: function (configFunction) {
+ // Return the replacement function for create-react-app to use to generate the Webpack
+ // Development Server config. "configFunction" is the function that would normally have
+ // been used to generate the Webpack Development server config - you can use it to create
+ // a starting configuration to modify instead of creating a config from scratch.
+ return function (proxy, allowedHost) {
+ // Create the default config by calling configFunction with the proxy/allowedHost parameters
+ const config = configFunction(proxy, allowedHost);
+
+ config.headers = {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET',
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
+ };
+
+ // Return your customized Webpack Development Server config.
+ return config
+ }
+ },
+}
+```
+
+We also offer a [middleware](https://github.com/safe-global/safe-apps-sdk/blob/4dad4fdf700ed299d3a81cc08cd4928b137787e9/packages/cra-template-safe-app/template/src/setupProxy.js#L1-L15) in our React template for using frameworks like Express, Next.js, etc.
+
+**SSL**
+
+To enable SSL with `react-scripts`, it's necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to:
+
+```json
+"scripts": {
+ "start": "HTTPS=true react-app-rewired start",
+},
+```
+
+If the SSL certificate provided by `react-scripts` isn't valid, it's required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning.
+
+## UI Kit
+
+Safe offers a react components package if you are creating your Safe App from scratch. This helps with a near-native look while enabling developers to use their branding in the Safe Apps.
+
+* [Check all available components in the storybook](https://components.safe.global)
+* [Check UI Kit repository](https://github.com/safe-global/safe-react-components)
+
+## Example app
+
+This [tutorial](https://github.com/gnosis/safe-apps-sdk/tree/master/guides/drain-safe-app) will build a Safe App that enables migrating all the assets from Safe to any other wallet in a single transaction. You will also learn about smart contract wallets, multi-signature transaction flow, and batched transactions.
diff --git a/safe-core-sdk/safe-apps/overview.md b/pages/apps-sdk-overview.mdx
similarity index 51%
rename from safe-core-sdk/safe-apps/overview.md
rename to pages/apps-sdk-overview.mdx
index 9e04befb..e81b91f0 100644
--- a/safe-core-sdk/safe-apps/overview.md
+++ b/pages/apps-sdk-overview.mdx
@@ -1,18 +1,26 @@
-# Safe Apps SDK Packages
+import { Callout } from 'nextra/components'
-You can find several packages on [our developer tools](https://github.com/safe-global/safe-apps-sdk) to make it easier to integrate third-party applications (Safe Apps) with [Safe](https://app.safe.global). Check the following diagram to see which package is more convenient for you:
+# Safe Apps SDK
-
+The Safe Apps SDK helps developers to build their dapps into the Safe\{Wallet\}. It turns a dapp into an HTML iframe component that can be accessed through Safe. This SDK provides extensive developer tooling to make it easy to create, test, and integrate Safe Apps into Safe. This includes a design system, reusable components, and a Safe App SDK that facilitates communication between the Safe App and Safe.
## Packages
-| Package | Version | Description |
-| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [cra-template-safe-app](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) | | CRA template to quickly bootstrap a Safe App. Use this package to start a new Safe App from scratch using React. |
-| [safe-apps-react-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-react-sdk) | [](https://www.npmjs.com/package/@safe-global/safe-apps-react-sdk) | A wrapper of [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) with helpful React Hooks. |
-| [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) | [](https://www.npmjs.com/package/@safe-global/safe-apps-sdk) | JavaScript SDK. This is the base package for all integrations. |
-| [safe-apps-provider](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-provider) | [](https://www.npmjs.com/package/@safe-global/safe-apps-provider) | A generic provider that can be used with common web3 libraries. (e.g. web3.js or Ethers) |
-| [safe-apps-web3modal](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-web3modal) | [](https://www.npmjs.com/package/@safe-global/safe-apps-web3modal) | A wrapper around [Web3Modal](https://github.com/Web3Modal/web3modal) that would automatically connect to the Safe when the app is loaded in the Safe Apps section. |
-| [safe-apps-wagmi](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-wagmi) | | A [wagmi](https://github.com/wagmi-dev/wagmi) connector for Safe Apps |
-| [@web3-onboard/gnosis](https://github.com/blocknative/web3-onboard/tree/v2-web3-onboard-develop/packages/gnosis) | | Blocknative included Safe App support in [@web3-onboard](https://github.com/blocknative/web3-onboard) v1.26.0. If you are already using this package you can [check here](https://github.com/blocknative/web3-onboard/blob/v2-web3-onboard-develop/packages/gnosis/README.md) how to configure it. |
-| [@web3-react/gnosis-safe](https://github.com/Uniswap/web3-react/tree/main/packages/gnosis-safe) | | [web3-react](https://github.com/Uniswap/web3-react) already includes a connector for Safe Apps by default. You can check at their docs how to use it. |
+Here are several packages to make it easier to integrate third-party applications (Safe Apps) with [Safe](https://app.safe.global). Check the following diagram to see which package is suitable for you:
+
+
+
+| Package | Version | Description |
+| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [cra-template-safe-app](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) | | CRA (Create React App) template to bootstrap a Safe App. Use this package to start a new Safe App from scratch using React. |
+| [safe-apps-react-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-react-sdk) | [](https://www.npmjs.com/package/@safe-global/safe-apps-react-sdk) | A wrapper of [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) with helpful React Hooks. |
+| [safe-apps-sdk](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-sdk) | [](https://www.npmjs.com/package/@safe-global/safe-apps-sdk) | JavaScript SDK. This is the base package for all integrations. |
+| [safe-apps-provider](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-provider) | [](https://www.npmjs.com/package/@safe-global/safe-apps-provider) | A generic provider that can be used with common web3 libraries. For example, web3.js or Ethers. |
+| [safe-apps-web3modal](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-web3modal) | [](https://www.npmjs.com/package/@safe-global/safe-apps-web3modal) | A wrapper around [Web3Modal](https://github.com/Web3Modal/web3modal) that would automatically connect to the Safe when the app is loaded in the Safe Apps section. |
+| [safe-apps-wagmi](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-wagmi) | | A [wagmi](https://github.com/wagmi-dev/wagmi) connector for Safe Apps. |
+| [@web3-onboard/gnosis](https://github.com/blocknative/web3-onboard/tree/v2-web3-onboard-develop/packages/gnosis) | | Blocknative included Safe App support in [@web3-onboard](https://github.com/blocknative/web3-onboard) v1.26.0. If you are already using this package, you can [check here](https://github.com/blocknative/web3-onboard/blob/v2-web3-onboard-develop/packages/gnosis/README.md) how to configure it. |
+| [@web3-react/gnosis-safe](https://github.com/Uniswap/web3-react/tree/main/packages/gnosis-safe) | | [web3-react](https://github.com/Uniswap/web3-react) already includes a connector for Safe Apps by default. You can check their docs on how to use it. |
+
+
+Safe Apps aren't owned, controlled, maintained, or audited by Safe. Safe can list or delist apps from Safe\{Wallet\} at its sole discretion.
+
diff --git a/pages/apps-sdk-release.mdx b/pages/apps-sdk-release.mdx
new file mode 100644
index 00000000..ab25b65d
--- /dev/null
+++ b/pages/apps-sdk-release.mdx
@@ -0,0 +1,78 @@
+import { Callout } from 'nextra/components'
+
+# Releasing your Safe App
+
+Here are some details about the release process for Safe Apps.
+
+## Get your Safe Apps into the hands of users
+
+Once you finish developing and testing your Safe App, your users can test it by opening the link to the hosted Safe App and adding it as a Custom App. [This guide](https://help.safe.global/en/articles/40859-add-a-custom-safe-app) explains how to add custom apps.
+
+## Get your Safe App listed in Safe\{Wallet\}
+
+
+ Due to limited resources, the Safe team can't ensure prompt app review.
+ Please fill in [this Google Form](https://forms.gle/PcDcaVx715LKrrQs8) before
+ submission.
+
+
+If you would like your Safe App to appear in the Safe, it must meet the following
+criteria:
+
+### Smart contracts must be audited
+
+Security is the top priority for Safe. Please provide an external audit result document if the Safe App includes smart contracts. If a third party created the smart contracts, ensure they're audited.
+
+### Your Safe App must include a manifest
+
+There must be a `manifest.json` at the root directory containing the following data:
+
+`"name": "Name of your Safe App"`
+
+Your Safe App's name needs to have 50 characters maximum.
+
+`"iconPath": "your_logo.svg"`
+
+A relative file path to your App's logo. The icon must be a square SVG image of at least 128 by 128 pixels.
+
+`"description": "This is the Safe app description."`
+
+Few sentences describing your application, a maximum of 200 characters
+
+You can find an example manifest file on [GitHub](https://github.com/safe-global/safe-apps-sdk/blob/main/packages/cra-template-safe-app/template/public/manifest.json). You can also find an example Safe App on IPFS [here](https://ipfs.io/ipfs/QmTgnb1J9FDR9gimptzvaEiNa25s92iQy37GyqYfwZw8Aj/).
+
+Remember that **CORS** needs to be configured correctly on the `manifest.json` so we can fetch the information as [mentioned here](./get-started.md#cors).
+
+### The app auto connects to the Safe
+
+When a user opens the app, it should automatically select the Safe as a wallet. Ensure to check the case if the user previously opened the app outside of the Safe with another wallet.
+
+### The Safe team has reviewed the Safe App
+
+The requirement doesn't apply for battle-tested applications hosted on the same domain as the main dapp.
+
+While we won't be able to do a proper audit for your Safe App, we still would like to look at the source code to raise issues or suggest improvements. Whether your Safe App is open or closed source, please send us either a link to the public repository or an invitation to the private repository.
+
+We also would like to make a rough functional review of the App, so please provide us with a high-level test plan/feature list that allows our QA team to ensure everything works as intended in production. Video walk-throughs are also welcome.
+
+### Help us decode your Safe App transactions
+
+We want to display interactions with Safe Apps as human-readable as possible. To do this, we need the ABI of the contracts your Safe App interacts with. The ideal way to do this would be to verify your contracts via [Sourcify](https://github.com/ethereum/sourcify), which we can leverage to decode transactions interacting with those contracts.
+
+Alternatively, you can provide us with the ABIs as JSON files or the links to the verified contracts on Etherscan so we can implement transaction decoding for your Safe App interactions.
+
+## Official launch and beyond
+
+After we've reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement.
+
+At any point after the launch, if you or your users encounter issues with the Safe App or want to release an update to an existing Safe App, please contact us via [Discord](https://chat.safe.global).
+
+While developing your Safe App, you can use [our production interface](https://app.safe.global) to test it. Some testnets like Sepolia are also available.
+
+Once your app is live, even if you run it locally, you can import it to the Safe application as a custom app. To do so, you should select the "Apps" tab:
+
+
+
+Use the `Add custom app` button and add your app using a link:
+
+
diff --git a/safe-smart-account/security/bug-bounty-program.md b/pages/bug-bounty.md
similarity index 74%
rename from safe-smart-account/security/bug-bounty-program.md
rename to pages/bug-bounty.md
index f1f4a66f..e20033c9 100644
--- a/safe-smart-account/security/bug-bounty-program.md
+++ b/pages/bug-bounty.md
@@ -1,28 +1,28 @@
# Bug Bounty
-Participate in the Safe Bug Bounty program to find bugs and get rewards. Earn up to $1,000,000 for every bug you report. Please carefully read through the [submission process](./bug-bounty-program.md#submission-process) section and get in touch via [bounty@safe.global](mailto:bounty@safe.global). You can also review the [bug bounties](./past-paid-bounties.md) we have paid in the past.
+Participate in the Safe Bug Bounty program to find bugs and get rewards. Earn up to $1,000,000 for every bug you report. Please carefully read through the [submission process](./bug-bounty.md#submission-process) section and get in touch via [bounty@safe.global](mailto:bounty@safe.global). You can also review the [bug bounties](./bug-bounty/past-paid-bounties.md) we've paid in the past.
## Audits
-Smart contract security experts have carefully audited Safe's contracts. Please refer to the [security audits page](./security-audits.md) for details.
+Smart contract security experts have carefully audited Safe's contracts. Please refer to the [security audits page](./smart-account-audits.md) for details.
## Rules
Many of the [Ethereum Foundation's bug bounty program rules](https://bounty.ethereum.org) are also applicable to the Safe Bug Bounty program:
-* Issues already submitted by another user or known to the Safe team are not eligible for bounty rewards.
+* Issues already submitted by another user or known to the Safe team aren't eligible for bounty rewards.
* Public disclosure of a vulnerability makes it ineligible for a bounty.
-* The Safe core development team, employees, and all other people paid by Safe, directly or indirectly (including the external auditors), are not eligible for rewards.
+* The Safe core development team, employees, and all other people paid by Safe, directly or indirectly (including the external auditors), aren't eligible for rewards.
* The Safe Bounty program considers several variables in determining rewards. Determinations of eligibility, score, and all terms related to an award are at the sole and final discretion of the Safe Bug Bounty panel.
## Scope
The scope of the bug bounty program includes the core contracts related to the following releases of the Safe contracts:
-* v1.4.1 ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.4.1), [readme](https://github.com/safe-global/safe-contracts/blob/v1.4.1/README.md))
-* _v1.3.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.3.0), [readme](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md))
-* _v1.2.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.2.0), [readme](https://github.com/safe-global/safe-contracts/blob/v1.2.0/README.md))
-* _v1.1.1_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.1.1), [readme](https://github.com/safe-global/safe-contracts/blob/v1.1.1/README.md))
+* v1.4.1 ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.4.1), [README](https://github.com/safe-global/safe-contracts/blob/v1.4.1/README.md))
+* _v1.3.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.3.0), [README](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md))
+* _v1.2.0_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.2.0), [README](https://github.com/safe-global/safe-contracts/blob/v1.2.0/README.md))
+* _v1.1.1_ ([Release details](https://github.com/safe-global/safe-contracts/releases/tag/v1.1.1), [README](https://github.com/safe-global/safe-contracts/blob/v1.1.1/README.md))
The scope of the bug bounty also includes the [Allowance Module](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances).
@@ -37,7 +37,7 @@ The scope of the bug bounty also includes the [Allowance Module](https://github.
* MultiSend.sol, MultiSendCallOnly.sol, CreateCall.sol
* TokenCallbackHandler.sol (formerly DefaultCallbackHandler.sol), CompatibilityFallbackHandler.sol, HandlerContext.sol
-You can find addresses for deployed instances of these contracts in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository.
+You can find addresses for deployed instances of these contracts [here](./smart-account-supported-networks/v1.4.1.md) or in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository.
**Gnosis Safe core contracts (up to version 1.3.0)**
@@ -48,7 +48,7 @@ You can find addresses for deployed instances of these contracts in the [Safe de
* CreateAndAddModules.sol, MultiSend.sol, MultiSendCallOnly.sol, CreateCall.sol
* DefaultCallbackHandler.sol, CompatibilityFallbackHandler.sol, HandlerContext.sol
-You can find addresses for deployed instances of these contracts in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository.
+You can find addresses for deployed instances of these contracts [here](./smart-account-supported-networks/v1.3.0.md) in the [Safe deployments](https://github.com/safe-global/safe-deployments) repository.
**Safe Modules contracts**
@@ -71,23 +71,23 @@ You can find addresses for deployed instances of these contracts in the [Safe de
## Intended behavior
-Please refer to the [readme file](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md) and the [release details](https://github.com/safe-global/safe-contracts/releases) of the respective contract version on GitHub as well as our [developer docs](https://docs.safe.global) for an extensive overview of the intended behavior of the smart contracts.
+Please refer to the [README file](https://github.com/safe-global/safe-contracts/blob/v1.3.0/README.md) and the [release details](https://github.com/safe-global/safe-contracts/releases) of the respective contract version on GitHub as well as our [developer docs](https://docs.safe.global) for an extensive overview of the intended behavior of the smart contracts.
For the allowance module, please refer to the corresponding [README file](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances/README.md).
## Compensation
-All bugs (they do not necessarily need to lead to a redeploy) will be considered for a bounty, but the severity of the threat will change the reward. Below are the reward levels for each threat severity and an example of such a threat.
+All bugs (they don't necessarily need to lead to a redeploy) will be considered for a bounty, but the severity of the threat will change the reward. Below are the reward levels for each threat severity and an example of such a threat.
-### High threat: up to $1,000,000
+### High threat: Up to $1,000,000
An identified attack that could steal funds or tokens or lock user funds would be considered a high threat. Likewise, a reported bug that, on its own, leads to a redeploy of the code will always be regarded as a high threat.
-### Medium threat: up to $50,000
+### Medium threat: Up to $50,000
-An identified attack where it is possible to steal funds because of unexpected behavior on the user's part. Unexpected behavior here means the user can't anticipate and comprehend that they will lose the funds.
+An identified attack where it's possible to steal funds because of unexpected behavior on the user's part. Unexpected behavior here means the user can't anticipate and comprehend that they will lose the funds.
-### Low threat: up to $10,000
+### Low threat: Up to $10,000
A way to avoid transaction fees or an exploit that in some way compromises the experience of other Safe users.
@@ -106,14 +106,14 @@ Please consult our [privacy policy](https://safe.global/privacy) for further det
## Responsible Disclosure Policy
-If you comply with the policies below when reporting a security issue to us, we will not initiate a lawsuit or law enforcement investigation against you in response to your report.
+If you comply with the policies below when reporting a security issue to us, we won't initiate a lawsuit or law enforcement investigation against you in response to your report.
_We ask that:_
* You give us reasonable time to investigate and mitigate an issue you report before making public any information about the report or sharing such information with others.
* You make a good faith effort to avoid privacy violations and disruptions to others, including (but not limited to) data destruction and interruption or degradation of our services.
-* You do not exploit a security issue you discover for any reason. This includes demonstrating additional risk, such as an attempted compromise of sensitive company data or probing for additional issues.
-* You do not violate any other applicable laws or regulations.
+* You don't exploit a security issue you discover for any reason. This includes demonstrating additional risk, such as an attempted compromise of sensitive company data or probing for additional issues.
+* You don't violate any other applicable laws or regulations.
Public disclosure of the bug or the indication of an intention to exploit it on Mainnet will make the report ineligible for a bounty. If in doubt about other aspects of the bounty, most of the [Ethereum Foundation bug bounty program rules](https://bounty.ethereum.org) will apply here.
diff --git a/safe-smart-account/security/past-paid-bounties.md b/pages/bug-bounty/past-paid-bounties.md
similarity index 58%
rename from safe-smart-account/security/past-paid-bounties.md
rename to pages/bug-bounty/past-paid-bounties.md
index a25bddd8..a20aed92 100644
--- a/safe-smart-account/security/past-paid-bounties.md
+++ b/pages/bug-bounty/past-paid-bounties.md
@@ -6,25 +6,25 @@ _This list includes valid submissions from past and current contract versions fo
We use a [MultiSend](https://github.com/safe-global/safe-contracts/blob/v1.2.0/contracts/libraries/MultiSend.sol) library to batch multiple transactions together. A transaction could be created that would self-destruct the contract. While this would not have put any funds at risk, user experience would have been seriously impacted.
-We have updated the library as well as our interfaces. Details about the fix can be found on [Github](https://github.com/safe-global/safe-contracts/pull/156).
+We've updated the library as well as our interfaces. Details about the fix can be found on [GitHub](https://github.com/safe-global/safe-contracts/pull/156).
-This bug was submitted by [Micah Zoltu](https://twitter.com/micahzoltu). It was regarded as a "Low Threat", and a bounty of 1,000 USD has been paid out.
+This bug was submitted by [Micah Zoltu](https://x.com/micahzoltu). It was regarded as a "Low Threat," and a bounty of 1,000 USD has been paid out.
## Transaction failure when receiving funds via `transfer` or `send`
-Since the beginning of the bug bounty period, the contract update has been live on the Ethereum Mainnet. We performed extensive internal testing and discovered an edge case where a Safe could not receive funds from another contract via `send` or `transfer`. This was due to additional gas costs caused by the [emission of additional events](https://github.com/safe-global/safe-contracts/pull/135) and [gas price changes](https://eips.ethereum.org/EIPS/eip-1884) in the latest hard fork. This issue has been fixed, and more details can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/149).
+Since the beginning of the bug bounty period, the contract update has been live on the Ethereum Mainnet. We performed extensive internal testing and discovered an edge case where a Safe couldn't receive funds from another contract via `send` or `transfer`. This was due to additional gas costs caused by the [emission of additional events](https://github.com/safe-global/safe-contracts/pull/135) and [gas price changes](https://eips.ethereum.org/EIPS/eip-1884) in the latest hard fork. This issue has been fixed, and more details can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/149).
## Duplicate owners during setup could render Safe unusable
-A bug in the `setupOwners` function on `OwnerManager.sol` allows duplicate owners to be set when the duplicated address is next to itself in the `_owners` array. This could cause unexpected behavior. While stealing funds from existing Safes is impossible, it is unexpected, and user funds might be locked. During Safe creation, the threshold of a Safe could be set to something unreachable, making it impossible to execute a transaction afterward.
+A bug in the `setupOwners` function on `OwnerManager.sol` allows duplicate owners to be set when the duplicated address is next to itself in the `_owners` array. This could cause unexpected behavior. While stealing funds from existing Safes is impossible, it's unexpected, and user funds might be locked. During Safe creation, the threshold of a Safe could be set to something unreachable, making it impossible to execute a transaction afterward.
The Safe interfaces prevent this by checking for duplicates, but if users directly interact with the contracts, this can still happen. The issue is tracked on [GitHub](https://github.com/safe-global/safe-contracts/issues/244).
-This bug was submitted by [David Nicholas](https://twitter.com/davidnich11). It was regarded as a "Medium Threat", and a bounty of 2,500 USD has been paid out.
+This bug was submitted by [David Nicholas](https://x.com/davidnich11). It was regarded as a "Medium Threat," and a bounty of 2,500 USD has been paid out.
## Setting a Safe as an owner of itself essentially reduces the threshold by 1
-The contracts allow to set a Safe as an owner of itself. This has the same effect as lowering the threshold by 1, as it is possible for anyone to generate a valid signature for the Safe itself when triggering `execTransaction`. This is especially an issue for Safes with a threshold of 1. Anyone can execute transactions if a Safe with threshold 1 adds itself as an owner.
+The contracts allow to set a Safe as an owner of itself. This has the same effect as lowering the threshold by 1, as it's possible for anyone to generate a valid signature for the Safe itself when triggering `execTransaction`. This is especially an issue for Safes with a threshold of 1. Anyone can execute transactions if a Safe with threshold 1 adds itself as an owner.
To our knowledge, there is no actual use case where it would make sense to set a Safe as an owner of itself. Hence, only a few number of Safes used themselves as owners. Most of these Safes could be contacted, and the Safe has been removed as an owner. The Safes still affected are Safes used for testing by us or Safes owned by a single owner with a threshold > 1 (so no immediate risk).
@@ -32,12 +32,12 @@ To fix this, the next contract update will prevent the Safe as its owner via `re
Details about this issue can be found on [GitHub](https://github.com/safe-global/safe-contracts/issues/229).
-The bug was submitted by [Kevin Foesenek](https://github.com/keviinfoes). It was regarded as a "Medium Threat", and a bounty of 5,000 USD has been paid out.
+The bug was submitted by [Kevin Foesenek](https://github.com/keviinfoes). It was regarded as a "Medium Threat," and a bounty of 5,000 USD has been paid out.
-## The function `getModulesPaginated` does not return all modules
+## The function `getModulesPaginated` doesn't return all modules
-The method [getModuledPaginated](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/ModuleManager.sol#L114) is used to return enabled modules page by page. For this, a `start` and a `pageSize` need to be specified, and the method will return an array of Safe Module addresses and `next`. This next can be used as the `start` to load the next page. When another page exists, then `next` is a module address. This module address, however, will not be present in any of the returned arrays. While this does not put any user assets at risk directly, it could lead to a wrong perception of the enabled modules of a Safe and, thereby, its state.
+The method [getModuledPaginated](https://github.com/safe-global/safe-contracts/blob/v1.3.0/contracts/base/ModuleManager.sol#L114) is used to return enabled modules page by page. For this, a `start` and a `pageSize` need to be specified, and the method will return an array of Safe Module addresses and `next`. This next can be used as the `start` to load the next page. When another page exists, then `next` is a module address. This module address, however, won't be present in any of the returned arrays. While this doesn't put any user assets at risk directly, it could lead to a wrong perception of the enabled modules of a Safe and, thereby, its state.
-The workaround is to append the `next` to the returned array of module addresses if it is not the zero or sentinel address. Alternatively, the last element of the returned array can be used as the `start` for the next page.
+The workaround is to append the `next` to the returned array of module addresses if it's not the zero or sentinel address. Alternatively, the last element of the returned array can be used as the `start` for the next page.
-This bug was submitted by [Renan Souza](https://github.com/RenanSouza2). It was regarded as a "Low Threat", and a bounty of 2,000 USD has been paid out.
+This bug was submitted by [Renan Souza](https://github.com/RenanSouza2). It was regarded as a "Low Threat," and a bounty of 2,000 USD has been paid out.
diff --git a/pages/glossary.md b/pages/glossary.md
new file mode 100644
index 00000000..6b5bc34c
--- /dev/null
+++ b/pages/glossary.md
@@ -0,0 +1,155 @@
+# Glossary
+
+This glossary contains terms and definitions used throughout the Safe documentation.
+
+## Account Abstraction
+
+Account Abstraction is a new paradigm that focuses on improving the user experience when interacting with the blockchain by replacing the use of [externally-owned accounts](#externally-owned-account) with [smart accounts](#smart-account).
+
+Some Account Abstraction features are:
+- Elimination of seed phrase reliance
+- Ease of multichain interactions
+- Account recovery
+- [Gasless transactions](#gasless-transaction)
+- Transaction batching
+
+See also:
+- [Account Abstraction](https://ethereum.org/en/roadmap/account-abstraction) on ethereum.org
+- [EIP-4337: Account Abstraction](https://www.erc4337.io) on erc4337.io
+
+## EIP-1271
+
+The [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) is an [Ethereum Improvement Proposal](https://eips.ethereum.org) that proposes a standard way for any contract to verify whether a signature on behalf of a given contract is valid. This is possible via the implementation of a `isValidSignature(hash, signature)` function on the signing contract, which can be called to validate a signature.
+
+## EIP-712
+
+The [EIP-712](https://eips.ethereum.org/EIPS/eip-712) is an Ethereum Improvement Proposal that proposes a standard for hashing and signing of typed structured data instead of just bytestrings.
+
+## ERC-4337
+
+The [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) is an [Ethereum Request for Comments](https://eips.ethereum.org/erc) that introduces a higher-layer pseudo-transaction object called `UserOperation`. Users send `UserOperation` objects into a separate mempool. A special class of actor called bundlers package up a set of these objects into a transaction making a `handleOps` call to a special contract, and that transaction then gets included in a block.
+
+See also:
+- [ERC-4337 Documentation](https://www.erc4337.io) on erc4337.io
+
+## Externally-Owned Account
+
+An externally-owned account (also known as EOA) is one of the two types of Ethereum accounts. A private key controls it; it has no code, and users can send messages by creating and signing Ethereum transactions.
+
+See also:
+- [Ethereum Accounts](https://ethereum.org/en/developers/docs/accounts) on ethereum.org
+- [Ethereum Whitepaper](https://ethereum.org/en/whitepaper/#ethereum-accounts) on ethereum.org
+
+## Gasless Transaction
+
+Gasless transactions (also known as meta-transactions) are Ethereum transactions that are executed by a third party called [relayer](#relayer) on behalf of a [smart account](#smart-account) to abstract the use of gas. Users must sign a message (instead of the transaction itself) with information about the transaction they want to execute. A relayer will create the Ethereum transaction, sign and execute it, and pay for the gas costs. The main benefit is that users can interact with the blockchain without holding the native token in their account.
+
+See also:
+- [Relay Kit documentation](./sdk-relay-kit) on docs.safe.global
+
+## Network
+
+A blockchain network is a collection of interconnected computers that utilize a blockchain protocol for communication. Decentralized networks allow users to send transactions, that are processed on a distributed ledger with a consensus mechanism ensuring the batching, verification, and acceptance of data into blocks. This structure enables the development of applications without the need for a central authority or server.
+
+See also:
+- [Networks](https://ethereum.org/en/developers/docs/networks) on ethereum.org
+
+## Owner
+
+A Safe owner is one of the accounts that control a given Safe. Only owners can manage the configuration of a Safe and approve transactions. They can be either [externally-owned accounts](#externally-owned-account) or [smart accounts](#smart-account). The [threshold](#threshold) of a Safe defines how many owners need to approve a Safe transaction to make it executable.
+
+See also:
+- [OwnerManager.sol](https://github.com/safe-global/safe-smart-account/blob/main/contracts/base/OwnerManager.sol) on github.com
+
+## Relayer
+
+A relayer is a third-party service acting as an intermediary between users' accounts and [blockchain networks](#network). It executes transactions on behalf of users and covers the associated execution costs, which may or may not be claimed.
+
+See also:
+- [What's Relaying?](https://docs.gelato.network/developer-services/relay/what-is-relaying) on docs.gelato.network
+
+## Safe{DAO}
+
+The Safe{DAO} is the [Decentralized Autonomous Organization](https://ethereum.org/dao) (DAO) that aims to foster a vibrant ecosystem of applications and wallets leveraging Safe accounts. This will be achieved through data-backed discussions, grants, and ecosystem investments, as well as providing developer tools and infrastructure.
+
+See also:
+- [Safe{DAO} Forum](https://forum.safe.global)
+- [Safe{DAO} Governance process](https://forum.safe.global/t/how-to-safedao-governance-process/846) on forum.safe.global
+- [Safe{DAO} Proposals](https://snapshot.org/#/safe.eth) on snapshot.org
+
+## Safe{Wallet}
+
+[Safe{Wallet}](https://app.safe.global) is the official user interface to manage Safe accounts.
+
+See also:
+- [Getting Started with Safe{Wallet}](https://help.safe.global/en/collections/9801-getting-started) on help.safe.global
+
+## Safe Apps
+
+Safe Apps are web applications that run in the Safe Apps marketplace. They support Safe, use the Safe Apps SDK to interact with it, and aren't owned, controlled, maintained, or audited by Safe.
+
+See also:
+- [Safe Apps SDK documentation](./apps-sdk-overview.mdx) on docs.safe.global
+
+## SafeAuth
+
+SafeAuth is a Multi-Party Computation (MPC) based product developed by [Safe](https://safe.global) and [Web3Auth](https://web3auth.io). Compatible with [Safe{Wallet}](https://app.safe.global), SafeAuth allows developers to build portable smart account use cases. Users are empowered to plug and play their user accounts between different decentralized applications through their social login.
+
+See also:
+- [SafeAuth documentation](./sdk-auth-kit/guides/safe-auth.md) on docs.safe.global
+- [SafeAuth demo app](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit/example) on github.com
+- [Safe + Web3Auth = SafeAuth: Portable Safe Accounts with social login](https://safe.mirror.xyz/WKxK5FENvkT8BjpowJQAhokYzb22438zUCG3wUSWvjc) on safe.mirror.xyz
+
+## Safe Guard
+
+A Safe Guard is a smart contract that adds restrictions on top of the n-out-of-m scheme that Safe accounts offer. They make checks before and after the execution of a Safe transaction.
+
+See also:
+- [Safe Guards documentation](./smart-account-guards.mdx) on docs.safe.global
+- [Zodiac Guards](https://zodiac.wiki/index.php?title=Category:Guards) on zodiac.wiki
+- [Get the enabled Safe Guard](./sdk-protocol-kit/reference.md#getguard) and [enable a Safe Guard](./sdk-protocol-kit/reference.md#createenableguardtx) with the Safe{Core} SDK on docs.safe.global
+
+## Safe Module
+
+A Safe Module is a smart contract that adds functionality to Safe while separating module logic from Safe core contracts.
+
+See also:
+- [Safe Modules documentation](./smart-account-modules.mdx) on docs.safe.global
+- [Safe Modules repository](https://github.com/safe-global/safe-modules) on github.com
+- [Zodiac Modules](https://zodiac.wiki/index.php?title=Category:Module) on zodiac.wiki
+- [Get the enabled Safe Modules](./sdk-protocol-kit/reference.md#getmodules) and [enable a Safe Module](./sdk-protocol-kit/reference.md#createenablemoduletx) with the Safe{Core} SDK on docs.safe.global
+
+## Smart Account
+
+A smart account (also known as a smart contract account) leverages the programmability of smart contracts to extend its functionality and improve its security in comparison with [externally-owned accounts](#externally-owned-account). Smart accounts are controlled by one or multiple externally-owned accounts or other smart accounts, and all transactions have to be initiated by one of those.
+
+Some common features that smart accounts offer to their users are:
+- Multisignature scheme
+- Transaction batching
+- Account recovery
+- [Gasless transactions](#gasless-transaction)
+
+Safe is one of the most trusted implementations of a smart account.
+
+## Transaction
+
+A transaction is an action initiated by an [externally-owned account](#externally-owned-account) to update the state of the EVM network. Transaction objects must be signed using the sender's private key, require a fee, and be included in a validated block.
+
+A Safe transaction is a transaction sent to a Safe Proxy contract calling the [execTransaction](https://github.com/safe-global/safe-smart-account/blob/main/contracts/Safe.sol#L104) method.
+
+See also:
+- [Transactions](https://ethereum.org/developers/docs/transactions) on ethereum.org
+
+## Threshold
+
+The threshold of a Safe account is a crucial configuration element that enables using Safe as a multi-signature smart account. It defines the number of required confirmations from the Safe owners a (Safe) transaction must have to be executable.
+
+See also:
+- [Get the threshold](./sdk-protocol-kit/reference.md#getthreshold) and [change the threshold](./sdk-protocol-kit/reference.md#createchangethresholdtx) of a Safe with the Safe{Core} SDK on docs.safe.global
+
+## Wallet
+
+A wallet is an interface or application that gives users control over their blockchain account. Wallets allow users to sign in to applications, read their account balance, send transactions, and verify their identity.
+
+See also:
+- [Ethereum Wallets](https://ethereum.org/wallets) on ethereum.org
diff --git a/pages/index.tsx b/pages/index.tsx
new file mode 100644
index 00000000..6a6777ac
--- /dev/null
+++ b/pages/index.tsx
@@ -0,0 +1,14 @@
+import { useEffect } from 'react'
+import { useRouter } from 'next/router'
+
+const RedirectIndex: React.FC = () => {
+ const { push } = useRouter()
+
+ useEffect(() => {
+ void push('/what-is-safe')
+ }, [push])
+
+ return <>>
+}
+
+export default RedirectIndex
diff --git a/pages/protocol-overview.mdx b/pages/protocol-overview.mdx
new file mode 100644
index 00000000..608789e5
--- /dev/null
+++ b/pages/protocol-overview.mdx
@@ -0,0 +1,36 @@
+# Safe\{Core\} Protocol
+
+Safe\{Core\} Protocol is an open, modular framework to make smart accounts secure, portable, and composable.
+
+Safe\{Core\} Protocol aims to create a comprehensive system to enhance user interactions' safety and flexibility within the smart account ecosystem. The protocol provides a common framework for building more tools, encourages the composition of various modules, and supports different types of smart accounts. The protocol enforces rules within the smart account ecosystem to achieve interoperability and security.
+
+## Architecture
+
+The architecture of the Safe\{Core\} Protocol comprises several integral components, each carrying its unique responsibilities. The protocol separates these elements by defining explicit interfaces, thus allowing independent expansion and iteration of each part. This modularity ensures the sustainable growth and evolution of the smart account ecosystem.
+
+
+
+### Manager
+
+At the heart of the protocol is the `Manager`, ensuring adherence to the prescribed rules set by the `Registry`. The `Manager` is an intermediary layer coordinating communication and interactions between `Accounts` and `Modules`.
+
+### Accounts
+
+`Accounts` are smart-contract-based user accounts (or Smart Accounts). The Safe\{Core\} Protocol is account-agnostic, meaning it's not tied to a specific account implementation.
+
+### Modules
+
+`Modules` extend the functionality of `Accounts` in different ways. Initial `Modules` are `Plugins`, `Hooks`, `Function Handlers`, and `Signature Verifiers`.
+
+### Registry
+
+The `Registry` is critical in maintaining and enforcing standards and security guarantees. The `Manager` will recognize and manage only the `Modules` that adhere to these guidelines.
+
+### Metadata
+
+Giving `Metadata` is crucial to offer a coherent context to the various parts and their interactions. This information helps developers add context to interactions, enhancing user understanding and transparency.
+
+## Further reading
+- [Safe\{Core\} Protocol Specification](https://github.com/safe-global/safe-core-protocol-specs)
+- [Safe\{Core\} Protocol Implementation](https://github.com/5afe/safe-core-protocol)
+- [Safe\{Core\} Protocol Demo Application](https://github.com/5afe/safe-core-protocol-demo/)
diff --git a/pages/resource-hub.mdx b/pages/resource-hub.mdx
new file mode 100644
index 00000000..3254a6e1
--- /dev/null
+++ b/pages/resource-hub.mdx
@@ -0,0 +1,3 @@
+import ResourceHub from '../components/ResourceHub'
+
+
diff --git a/safe-core-sdk/api-kit/README.md b/pages/sdk-api-kit.md
similarity index 67%
rename from safe-core-sdk/api-kit/README.md
rename to pages/sdk-api-kit.md
index 4e463d53..c643a531 100644
--- a/safe-core-sdk/api-kit/README.md
+++ b/pages/sdk-api-kit.md
@@ -6,7 +6,7 @@ The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/ap
In this guide we will see how to propose transactions to the service and collect the signatures from the owners so they become executable.
-For more detailed information, see the guide [Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and the [API Kit Reference](../../reference/safe-core-sdk//api-kit/).
+For more detailed information, see the guide [Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and the [API Kit Reference](./sdk-api-kit/reference.md).
### Prerequisites
@@ -24,9 +24,9 @@ yarn add @safe-global/api-kit
## Instantiate an EthAdapter
-First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.io/v5/) Ethereum libraries.
+First of all, we need to create an `EthAdapter`, which contains all the required utilities for the SDKs to interact with the blockchain. It acts as a wrapper for [web3.js](https://web3js.readthedocs.io/) or [ethers.js](https://docs.ethers.org/v6/) Ethereum libraries.
-Depending on the library used by the Dapp, there are two options:
+Depending on the library used by the dapp, there are two options:
- [Create an `EthersAdapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/ethers)
- [Create a `Web3Adapter` instance](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit/src/adapters/web3)
@@ -36,7 +36,7 @@ Once the instance of `EthersAdapter` or `Web3Adapter` is created, it can be used
```typescript
import { EthersAdapter } from '@safe-global/protocol-kit'
-const provider = new ethers.providers.JsonRpcProvider(config.RPC_URL)
+const provider = new ethers.JsonRpcProvider(config.RPC_URL)
const signer = new ethers.Wallet(config.SIGNER_ADDRESS_PRIVATE_KEY, provider)
const ethAdapter = new EthersAdapter({
@@ -47,47 +47,53 @@ const ethAdapter = new EthersAdapter({
## Initialize the API Kit
-We need to create an instance of the API Kit.
+We need to create an instance of the API Kit. In chains where Safe provides a Transaction Service, it's enough to specify the `chainId`. You can set your own service using the optional `txServiceUrl` parameter.
```typescript
import SafeApiKit from '@safe-global/api-kit'
-const safeApiKit = new SafeApiKit({
- txServiceUrl: 'https://safe-transaction-mainnet.safe.global',
- ethAdapter
+const apiKit = new SafeApiKit({
+ chainId: 1n
+})
+
+
+// or using a custom service
+const apiKit = new SafeApiKit({
+ chainId: 1n, // set the correct chainId
+ txServiceUrl: 'https://url-to-your-custom-service'
})
```
## Propose a transaction to the service
-Before a transaction can be executed, any of the Safe signers needs to initiate the process by creating a proposal of a transaction. We send this transaction to the service to make it accessible by the other owners so they can give their approbal and sign the transaction as well.
+Before a transaction can be executed, any of the Safe signers needs to initiate the process by creating a proposal of a transaction. We send this transaction to the service to make it accessible by the other owners so they can give their approval and sign the transaction as well.
```typescript
import Safe from '@safe-global/protocol-kit'
// Create Safe instance
-const safe = await Safe.create({
+const protocolKit = await Safe.create({
ethAdapter,
safeAddress: config.SAFE_ADDRESS
})
// Create transaction
-const safeTransactionData: SafeTransactionDataPartial = {
+const safeTransactionData: MetaTransactionData = {
to: '0x',
value: '1', // 1 wei
data: '0x',
operation: OperationType.Call
}
-const safeTransaction = await safe.createTransaction({ safeTransactionData })
+const safeTransaction = await protocolKit.createTransaction({ transactions: [safeTransactionData] })
const senderAddress = await signer.getAddress()
-const safeTxHash = await safe.getTransactionHash(safeTransaction)
-const signature = await safe.signTransactionHash(safeTxHash)
+const safeTxHash = await protocolKit.getTransactionHash(safeTransaction)
+const signature = await protocolKit.signHash(safeTxHash)
// Propose transaction to the service
-await safeApiKit.proposeTransaction({
- safeAddress: await safe.getAddress(),
+await apiKit.proposeTransaction({
+ safeAddress: await protocolKit.getAddress(),
safeTransactionData: safeTransaction.data,
safeTxHash,
senderAddress,
@@ -97,7 +103,7 @@ await safeApiKit.proposeTransaction({
## Retrieve the pending transactions
-There are different methods in the API Kit available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the uncommented method.
+Different methods in the API Kit are available to retrieve pending transactions depending on the situation. To retrieve a transaction given the Safe transaction hash use the method that's not commented.
```typescript
const transaction = await service.getTransaction("")
@@ -110,14 +116,14 @@ const transaction = await service.getTransaction("")
## Confirm the transaction
-In this step we need to sing the transaction with the Protocol Kit and submit the signature the the Safe Transaction Service using the `confirmTransaction` method.
+In this step we need to sign the transaction with the Protocol Kit and submit the signature to the Safe Transaction Service using the `confirmTransaction` method.
```typescript
const safeTxHash = transaction.transactionHash
-const signature = await safe.signTransactionHash(safeTxHash)
+const signature = await protocolKit.signHash(safeTxHash)
// Confirm the Safe transaction
-const signatureResponse = await service.confirmTransaction(safeTxHash, signature.data)
+const signatureResponse = await apiKit.confirmTransaction(safeTxHash, signature.data)
```
-The Safe transaction is now ready to be executed. This can be done using the Safe{Wallet} web interface, the Protocol Kit or any other tool that is available.
+The Safe transaction is now ready to be executed. This can be done using the Safe{Wallet} web interface, the Protocol Kit or any other tool that's available.
diff --git a/reference/safe-core-sdk/api-kit/README.md b/pages/sdk-api-kit/reference.md
similarity index 60%
rename from reference/safe-core-sdk/api-kit/README.md
rename to pages/sdk-api-kit/reference.md
index 98cdb596..c646c6ef 100644
--- a/reference/safe-core-sdk/api-kit/README.md
+++ b/pages/sdk-api-kit/reference.md
@@ -1,4 +1,4 @@
-# API Kit
+# Reference
The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) facilitates the interaction with the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service).
@@ -17,15 +17,15 @@ yarn add @safe-global/api-kit
Returns the information and configuration of the service.
```typescript
-const serviceInfo: SafeServiceInfoResponse = await safeService.getServiceInfo()
+const serviceInfo: SafeServiceInfoResponse = await apiKit.getServiceInfo()
```
-### `getServiceMasterCopiesInfo`
+### `getServiceSingletonsInfo`
-Returns the list of Safe master copies.
+Returns the list of Safe singletons.
```typescript
-const masterCopies: MasterCopyResponse = await safeService.getServiceMasterCopiesInfo()
+const singletons: SafeSingletonResponse = await apiKit.getServiceSingletonsInfo()
```
### `decodeData`
@@ -33,7 +33,7 @@ const masterCopies: MasterCopyResponse = await safeService.getServiceMasterCopie
Decodes the specified Safe transaction data.
```typescript
-const decodedData = await safeService.decodeData(data)
+const decodedData = await apiKit.decodeData(data)
```
### `getSafesByOwner`
@@ -41,7 +41,7 @@ const decodedData = await safeService.decodeData(data)
Returns the list of Safes where the address provided is an owner.
```typescript
-const safes: OwnerResponse = await safeService.getSafesByOwner(ownerAddress)
+const safes: OwnerResponse = await apiKit.getSafesByOwner(ownerAddress)
```
### `getSafesByModule`
@@ -57,7 +57,7 @@ const safes: ModulesResponse = await getSafesByModule(moduleAddress)
Returns all the information of a Safe transaction.
```typescript
-const tx: SafeMultisigTransactionResponse = await safeService.getTransaction(safeTxHash)
+const tx: SafeMultisigTransactionResponse = await apiKit.getTransaction(safeTxHash)
```
### `getTransactionConfirmations`
@@ -66,7 +66,7 @@ Returns the list of confirmations for a given a Safe transaction.
```typescript
const confirmations: SafeMultisigConfirmationListResponse =
- await safeService.getTransactionConfirmations(safeTxHash)
+ await apiKit.getTransactionConfirmations(safeTxHash)
```
### `confirmTransaction`
@@ -74,7 +74,7 @@ const confirmations: SafeMultisigConfirmationListResponse =
Adds a confirmation for a Safe transaction.
```typescript
-const signature: SignatureResponse = await safeService.confirmTransaction(safeTxHash, signature)
+const signature: SignatureResponse = await apiKit.confirmTransaction(safeTxHash, signature)
```
### `getSafeInfo`
@@ -82,7 +82,7 @@ const signature: SignatureResponse = await safeService.confirmTransaction(safeTx
Returns the information and configuration of the provided Safe address.
```typescript
-const safeInfo: SafeInfoResponse = await safeService.getSafeInfo(safeAddress)
+const safeInfo: SafeInfoResponse = await apiKit.getSafeInfo(safeAddress)
```
### `getSafeDelegates`
@@ -98,7 +98,7 @@ const delegateConfig: GetSafeDelegateProps = {
limit, // Optional
offset // Optional
}
-const delegates: SafeDelegateListResponse = await safeService.getSafeDelegates(delegateConfig)
+const delegates: SafeDelegateListResponse = await apiKit.getSafeDelegates(delegateConfig)
```
### `addSafeDelegate`
@@ -113,7 +113,7 @@ const delegateConfig: AddSafeDelegateProps = {
label,
signer
}
-await safeService.addSafeDelegate(delegateConfig)
+await apiKit.addSafeDelegate(delegateConfig)
```
### `removeSafeDelegate`
@@ -126,7 +126,7 @@ const delegateConfig: DeleteSafeDelegateProps = {
delegatorAddress,
signer
}
-await safeService.removeSafeDelegate(delegateConfig)
+await apiKit.removeSafeDelegate(delegateConfig)
```
### `getSafeCreationInfo`
@@ -134,7 +134,7 @@ await safeService.removeSafeDelegate(delegateConfig)
Returns the creation information of a Safe.
```typescript
-const safeCreationInfo: SafeCreationInfoResponse = await safeService.getSafeCreationInfo(
+const safeCreationInfo: SafeCreationInfoResponse = await apiKit.getSafeCreationInfo(
safeAddress
)
```
@@ -145,7 +145,7 @@ Estimates the safeTxGas for a given Safe multi-signature transaction.
```typescript
const estimateTx: SafeMultisigTransactionEstimateResponse =
- await safeService.estimateSafeTransaction(safeAddress, safeTransaction)
+ await apiKit.estimateSafeTransaction(safeAddress, safeTransaction)
```
### `proposeTransaction`
@@ -161,7 +161,7 @@ const transactionConfig: ProposeTransactionProps = {
senderSignature,
origin
}
-await safeService.proposeTransaction(transactionConfig)
+await apiKit.proposeTransaction(transactionConfig)
```
### `getIncomingTransactions`
@@ -169,7 +169,7 @@ await safeService.proposeTransaction(transactionConfig)
Returns the history of incoming transactions of a Safe account.
```typescript
-const incomingTxs: TransferListResponse = await safeService.getIncomingTransactions(safeAddress)
+const incomingTxs: TransferListResponse = await apiKit.getIncomingTransactions(safeAddress)
```
### `getModuleTransactions`
@@ -177,7 +177,7 @@ const incomingTxs: TransferListResponse = await safeService.getIncomingTransacti
Returns the history of module transactions of a Safe account.
```typescript
-const moduleTxs: SafeModuleTransactionListResponse = await safeService.getModuleTransactions(
+const moduleTxs: SafeModuleTransactionListResponse = await apiKit.getModuleTransactions(
safeAddress
)
```
@@ -187,7 +187,7 @@ const moduleTxs: SafeModuleTransactionListResponse = await safeService.getModule
Returns the history of multi-signature transactions of a Safe account.
```typescript
-const multisigTxs: SafeMultisigTransactionListResponse = await safeService.getMultisigTransactions(
+const multisigTxs: SafeMultisigTransactionListResponse = await apiKit.getMultisigTransactions(
safeAddress
)
```
@@ -197,13 +197,13 @@ const multisigTxs: SafeMultisigTransactionListResponse = await safeService.getMu
Returns the list of multi-signature transactions that are waiting for the confirmation of the Safe owners.
```typescript
-const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPendingTransactions(
+const pendingTxs: SafeMultisigTransactionListResponse = await apiKit.getPendingTransactions(
safeAddress
)
```
```typescript
-const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPendingTransactions(
+const pendingTxs: SafeMultisigTransactionListResponse = await apiKit.getPendingTransactions(
safeAddress,
currentNonce
)
@@ -214,7 +214,7 @@ const pendingTxs: SafeMultisigTransactionListResponse = await safeService.getPen
Returns a list of transactions for a Safe. The list has different structures depending on the transaction type.
```typescript
-const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions(
+const allTxs: SafeMultisigTransactionListResponse = await apiKit.getAllTransactions(
safeAddress
)
```
@@ -225,7 +225,7 @@ const allTxsOptions: AllTransactionsOptions = {
queued,
trusted
}
-const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTransactions(
+const allTxs: SafeMultisigTransactionListResponse = await apiKit.getAllTransactions(
safeAddress,
allTxsOptions
)
@@ -236,7 +236,7 @@ const allTxs: SafeMultisigTransactionListResponse = await safeService.getAllTran
Returns the right nonce to propose a new transaction right after the last pending transaction.
```typescript
-const nextNonce = await safeService.getNextNonce(safeAddress)
+const nextNonce = await apiKit.getNextNonce(safeAddress)
```
### `getTokenList`
@@ -244,7 +244,7 @@ const nextNonce = await safeService.getNextNonce(safeAddress)
Returns the list of all the ERC20 tokens handled by the Safe.
```typescript
-const tokens: TokenInfoListResponse = await safeService.getTokenList()
+const tokens: TokenInfoListResponse = await apiKit.getTokenList()
```
### `getToken`
@@ -252,5 +252,38 @@ const tokens: TokenInfoListResponse = await safeService.getTokenList()
Returns the information of a given ERC20 token.
```typescript
-const token: TokenInfoResponse = await safeService.getToken(tokenAddress)
+const token: TokenInfoResponse = await apiKit.getToken(tokenAddress)
```
+
+### `getMessage`
+
+Returns a message from its hash.
+
+```typescript
+const message: SafeMessage = await apiKit.getMessage(safeMessageHash)
+```
+
+### `getMessages`
+
+Returns the list of messages associated to a Safe account.
+
+```typescript
+const messagesResponse: SafeMessageListResponse = await apiKit.getMessages(safeAddress, { ordering, limit, offset })
+```
+
+### `addMessage`
+
+Creates a new message with an initial signature.
+
+```typescript
+await apiKit.addMessage(safeAddress, { message, signature, safeAppId })
+```
+
+### `addMessageSignature`
+
+Adds a signature to an existing message.
+
+```typescript
+await apiKit.addMessageSignature(safeMessageHash, signature)
+```
+
diff --git a/pages/sdk-api-kit/reference/migrating-to-v1.md b/pages/sdk-api-kit/reference/migrating-to-v1.md
new file mode 100644
index 00000000..e554cf89
--- /dev/null
+++ b/pages/sdk-api-kit/reference/migrating-to-v1.md
@@ -0,0 +1,114 @@
+# Migrating to v1
+
+This guide references the major changes between `safe-service-client` and `api-kit` v1 to help those migrating an existing application.
+
+**Note:** Follow this guide before migrating to `api-kit` v2.
+
+After completing this guide, you can remove `@safe-global/safe-service-client` from your package.json`.
+
+## Adding the new dependency
+
+To add the API Kit to your project, run the following:
+
+```bash
+yarn add @safe-global/api-kit@1.3.1
+```
+
+Change your initialization like this:
+
+```typescript
+// old
+import SafeServiceClient from '@safe-global/safe-service-client'
+
+const safeService = new SafeServiceClient({
+ txServiceUrl: 'https://your-transaction-service-url',
+ ethAdapter
+})
+
+// new
+import SafeApiKit from '@safe-global/api-kit'
+
+const apiKit = new SafeApiKit({
+ txServiceUrl: 'https://your-transaction-service-url',
+ ethAdapter
+})
+```
+
+## `getSafeDelegates()`
+
+The `getSafeDelegates` was updated to accept more filtering parameters. Now, it accepts an object with multiple properties instead of only the `safeAddress` parameter.
+
+```typescript
+const delegateConfig: GetSafeDelegateProps = {
+ safeAddress, // Optional
+ delegateAddress, // Optional
+ delegatorAddress, // Optional
+ label, // Optional
+ limit, // Optional
+ offset // Optional
+}
+const delegates: SafeDelegateListResponse = await apiKit.getSafeDelegates(delegateConfig)
+```
+
+## `addSafeDelegate()`
+
+Parameter object properties were updated as follows:
+
+```typescript
+// old
+const delegateConfig: SafeDelegateConfig = {
+ safe,
+ delegate,
+ label,
+ signer
+}
+await safeService.addSafeDelegate(delegateConfig)
+
+// new
+const delegateConfig: AddSafeDelegateProps = {
+ safeAddress, // Optional
+ delegateAddress,
+ delegatorAddress,
+ label,
+ signer
+}
+await apiKit.addSafeDelegate(delegateConfig)
+```
+
+## `removeAllSafeDelegates()`
+
+The method was deprecated and removed.
+
+## `removeSafeDelegate()`
+
+Parameter object properties were updated as follows:
+
+```typescript
+// old
+const delegateConfig: SafeDelegateDeleteConfig = {
+ safe,
+ delegate,
+ signer
+}
+await safeService.removeSafeDelegate(delegateConfig)
+
+// new
+const delegateConfig: DeleteSafeDelegateProps = {
+ delegateAddress,
+ delegatorAddress,
+ signer
+}
+await apiKit.removeSafeDelegate(delegateConfig)
+```
+
+## `getBalances()`
+
+The method was deprecated and removed.
+
+## `getUSDBalances()`
+
+The method was deprecated and removed.
+
+## `getCollectibles()`
+
+The method was deprecated and removed.
\ No newline at end of file
diff --git a/pages/sdk-api-kit/reference/migrating-to-v2.md b/pages/sdk-api-kit/reference/migrating-to-v2.md
new file mode 100644
index 00000000..0d8ec4d4
--- /dev/null
+++ b/pages/sdk-api-kit/reference/migrating-to-v2.md
@@ -0,0 +1,60 @@
+# Migrating to v2
+
+This guide references the major changes between v1 and v2 to help those migrating an existing app.
+
+## API Kit constructor
+
+It won't be necessary to specify a `txServiceUrl` in environments where Safe has a Transaction Service running. Providing the chain ID will be enough. If you want to use your custom service or the kit in a chain not supported by a Safe Transaction Service, you can add the `txServiceUrl` parameter.
+
+```js
+// old:
+import SafeApiKit from '@safe-global/api-kit'
+
+const apiKit = new SafeApiKit({
+ txServiceUrl: 'https://your-transaction-service-url',
+ ethAdapter
+})
+
+// new:
+import SafeApiKit from '@safe-global/api-kit'
+
+const chainId: bigint = 1n
+const apiKit = new SafeApiKit({
+ chainId
+})
+
+// or set a custom Transaction Service
+const apiKit = new SafeApiKit({
+ chainId,
+ txServiceUrl: 'https://your-transaction-service-url'
+})
+```
+
+## Use the route you prefer
+
+API Kit v1 forced any custom service to be hosted under the `/api` route of the URL specified in `txServiceUrl`. This isn't the case anymore; you can specify any preferred route or subdomain.
+
+Note that if you use a custom service running under `/api`, you will now need to migrate as follows:
+
+```js
+// old:
+const txServiceUrl = 'https://your-transaction-service-domain/'
+const apiKit = new SafeApiKit({
+ txServiceUrl,
+ ethAdapter
+})
+// new:
+const chainId: bigint = 1n
+const txServiceUrl = 'https://your-transaction-service-domain/api'
+const apiKit = new SafeApiKit({
+ chainId,
+ txServiceUrl
+})
+```
+
+## MasterCopy to Singleton
+
+To avoid confusion between terms used as synonyms, we aligned all our code to use the word `singleton`.
+
+- Rename type `MasterCopyResponse` to `SafeSingletonResponse`
+- Rename method `getServiceMasterCopiesInfo()` to `getServiceSingletonsInfo()`
\ No newline at end of file
diff --git a/safe-core-sdk/auth-kit/README.md b/pages/sdk-auth-kit.md
similarity index 90%
rename from safe-core-sdk/auth-kit/README.md
rename to pages/sdk-auth-kit.md
index d07249dc..71065b02 100644
--- a/safe-core-sdk/auth-kit/README.md
+++ b/pages/sdk-auth-kit.md
@@ -3,7 +3,8 @@
The Auth Kit creates an Ethereum address and authenticates a blockchain account using an email address, social media account, or crypto wallet like Metamask. You can get the Ethereum address and the associated safe addresses as an output for the sign-in process.
The following guides show how to use the Auth Kit and integrate it into your project by using one of the packs:
-- [Web3Auth Pack](./web3auth.md)
+- [SafeAuth Pack](./sdk-auth-kit/guides/safe-auth.md)
## Resources
+
- [Auth Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit)
diff --git a/pages/sdk-auth-kit/_meta.json b/pages/sdk-auth-kit/_meta.json
new file mode 100644
index 00000000..2fd436b3
--- /dev/null
+++ b/pages/sdk-auth-kit/_meta.json
@@ -0,0 +1,4 @@
+{
+ "guides": "Guides",
+ "reference": "Reference"
+}
\ No newline at end of file
diff --git a/pages/sdk-auth-kit/guides/safe-auth.md b/pages/sdk-auth-kit/guides/safe-auth.md
new file mode 100644
index 00000000..a823f4c3
--- /dev/null
+++ b/pages/sdk-auth-kit/guides/safe-auth.md
@@ -0,0 +1,175 @@
+# Integration with SafeAuth
+
+This guide demonstrates creating an externally-owned account using your email or social media account. Once authenticated, you can sign transactions and interact with your Safe accounts.
+
+The `SafeAuthPack` is an authentication system that utilizes the [Web3Auth](https://web3auth.io) MPC technology. It was developed in collaboration with Web3Auth to create a smooth onboarding experience for web2 users across different dapps.
+
+## Prerequisites
+
+- [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
+
+### Install dependencies
+
+```bash
+yarn add @safe-global/auth-kit @web3auth/safeauth-embed
+```
+
+## Create a SafeAuthPack instance
+
+We will use the `SafeAuthPack` exported from the `@safe-global/auth-kit` package.
+
+Create an instance of the [SafeAuthPack](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit/src/packs/safe-auth/SafeAuthPack.ts) using the required `SafeAuthConfig` configuration object.
+
+> Supported networks:
+>
+> - Production: Ethereum, Polygon, BSC, Avalanche, Optimism, Celo, Arbitrum, Gnosis chain
+> - Test: Sepolia, Polygon Mumbai, BSC Testnet, Avalanche Testnet, Arbitrum Testnet, Optimism Testnet
+```typescript
+import {
+ SafeAuthPack,
+ SafeAuthConfig,
+ SafeAuthInitOptions,
+} from '@safe-global/auth-kit'
+
+const safeAuthConfig: SafeAuthConfig = {
+ txServiceUrl: 'https://safe-transaction-mainnet.safe.global',
+}
+const safeAuthInitOptions: SafeAuthInitOptions = {
+ enableLogging: true,
+ showWidgetButton: false,
+ chainConfig: {
+ chainId: '0x1',
+ rpcTarget: `${rpcUrl}`
+ },
+}
+
+// You can also pass the SafeAuthConfig as a parameter to the SafeAuthPack constructor if you are using a custom txServiceUrl domain
+// e.g. const safeAuthConfig: SafeAuthConfig = {
+// txServiceUrl: 'https://safe-transaction-mainnet.safe.global'
+// }
+const safeAuthPack = new SafeAuthPack(safeAuthConfig)
+await safeAuthPack.init(safeAuthInitOptions)
+```
+
+## Sign in to an Ethereum account
+
+After creating your `SafeAuthPack` instance, initiate the authentication process by calling the `signIn()` method. Typically, this method is called when the user clicks a "Sign In" button on the web page.
+
+After successfully signing in, you will create a new Ethereum Wallet. This wallet will be used for all future logins and can be **shared across different applications**.
+
+```typescript
+// The signIn() method returns the user's Ethereum address and the associated Safe addresses
+// The `await` will last until the user is authenticated. Therefore, it will be active while the authentication popup is being displayed.
+const authKitSignData = await safeAuthPack.signIn()
+```
+
+The returned `authKitSignData` data contains the following properties:
+
+```typescript
+AuthKitSignInData {
+ eoa: string // The safe signer
+ safes?: string[] // The list of associated Safe addresses in the chain
+}
+```
+
+The `signOut()` method removes the current session.
+
+```typescript
+await safeAuthPack.signOut()
+```
+
+After the user is authenticated, call `getProvider()` to get the Ethereum provider instance. This is a [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) compatible provider you can wrap using your favorite library (web3, ethers).
+
+```typescript
+safeAuthPack.getProvider()
+```
+
+We offer two methods for listening to events, `subscribe()` and `unsubscribe()`.
+
+```typescript
+const accountChangedHandler = (accounts: string[]) => {
+ console.log('Signer accounts:', accounts)
+}
+
+safeAuthPack.subscribe('accountsChanged', accountChangedHandler)
+safeAuthPack.unsubscribe('accountsChanged', accountChangedHandler)
+```
+
+The `SafeAuthPack` instantiation will return the list of associated Safe addresses as part of the response from the `signIn()` method when the `txServiceUrl` is provided.
+
+```typescript
+const safeAuthPack = new SafeAuthPack()
+```
+
+## Signing and executing transactions using the SafeAuthPack and Protocol Kit
+
+The `SafeAuthPack` can be used with the [Protocol Kit](../../sdk-protocol-kit.md) to establish a connection to a Safe. This connection is made using the `provider` and `signer` associated with the authenticated account.
+
+After connecting, you can use any of the methods provided in the [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#sdk-api).
+
+```typescript
+import { ethers } from 'ethers'
+import { EthersAdapter } from '@safe-global/protocol-kit'
+
+// Wrap EIP-1193 provider with ethers
+const provider = new ethers.BrowserProvider(safeAuthPack.getProvider())
+const signer = provider.getSigner()
+
+// Create the Safe EthersAdapter
+const ethAdapter = new EthersAdapter({
+ ethers,
+ signerOrProvider: signer || provider,
+})
+
+// Instantiate the protocolKit
+const protocolKit = await Safe.create({
+ ethAdapter,
+ safeAddress,
+})
+
+// Create a Safe transaction with the provided parameters
+const safeTransactionData: MetaTransactionData = {
+ to: `${ethAddress}`,
+ data: '0x',
+ value: ethers.parseUnits('0.0001', 'ether').toString(),
+}
+
+const safeTransaction = await protocolKit.createTransaction({
+ transactions: [safeTransactionData],
+})
+
+// Sign the transaction if the Safe have several owners
+// safeTransaction = await protocolKit1.signTransaction(safeTransaction)
+// safeTransaction = await protocolKit2.signTransaction(safeTransaction)
+
+// Execute the transaction
+await protocolKit.executeTransaction(safeTransaction)
+```
+
+## Sign messages using the `SafeAuthPack`
+
+You can also sign any arbitrary message or transaction as a regular Signing Account with your favorite web3 library:
+
+```typescript
+// Using web3
+const web3 = new Web3(safeAuthPack.getProvider())
+
+await web3.eth.sendTransaction(tx)
+await web3.eth.signTransaction(tx)
+const message = 'hello world'
+const address = '0x...'
+await web3.eth.personal.sign(message, address)
+
+// Using ethers
+const provider = new ethers.BrowserProvider(safeAuthPack.getProvider())
+const signer = provider.getSigner()
+
+await signer.sendTransaction(tx)
+await signer.signTransaction(tx)
+await signer.signMessage(message)
+```
+
+## Examples
+
+- [React](https://github.com/safe-global/safe-core-sdk/blob/main/packages/auth-kit/example/src/App.tsx)
+- [Vanilla Typescript](https://github.com/5afe/safe-auth)
\ No newline at end of file
diff --git a/reference/safe-core-sdk/auth-kit/README.md b/pages/sdk-auth-kit/reference.md
similarity index 57%
rename from reference/safe-core-sdk/auth-kit/README.md
rename to pages/sdk-auth-kit/reference.md
index 2e891b0f..4a2c2606 100644
--- a/reference/safe-core-sdk/auth-kit/README.md
+++ b/pages/sdk-auth-kit/reference.md
@@ -1,4 +1,4 @@
-# Auth Kit
+# Reference
The [Auth Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit) creates or retrieves an Ethereum address and authenticates a blockchain account using an email address, a social media platform or a crypto wallet address.
@@ -7,26 +7,26 @@ The [Auth Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/a
To add the Auth Kit to your project, run:
```bash
-yarn add @safe-global/auth-kit
+yarn add @safe-global/auth-kit @web3auth/safeauth-embed
```
-The Auth Kit can integrate several providers in the form of **"packs"**. A pack is a piece of code that works with the chosen provider to give Safe users access to new services.
+The Auth Kit can integrate several providers in the form of **"packs."** A pack is a piece of code that works with the chosen provider to give Safe users access to new services.
-To use each pack, the right package needs to be installed:
+To use each pack, you must ensure the appropriate packages are installed.
-- [Web3Auth](./Web3AuthModalPack.md#install)
+- [SafeAuth](./reference/safe-auth-pack.md#install)
## How to use a pack
-To start working with the packs, instantiate the main class and call the `init()` method afterwards.
+To start working with the packs, instantiate the main class and call the `init()` method afterward.
```typescript
-const pack = new Web3AuthModalPack(packConfig)
+const pack = new SafeAuthPack(packConfig)
await pack.init(packInitOptions)
```
After the initialization, use the methods in the pack to interact with the chosen provider.
-There are some common methods (`signIn()`, `signOut()`, etc.) that can be called regardless of the package being used.
+Some common methods (`signIn()`, `signOut()`, etc.) can be called regardless of the package being used.
-The kit creates a common interface that any pack should implement. Check the [`AuthKitBasePack`](./AuthKitBasePack.md) abstract class to get more details.
+The kit creates a common interface that any pack should implement. Check the [`AuthKitBasePack`](./reference/auth-kit-base-pack.md) abstract class to get more details.
diff --git a/pages/sdk-auth-kit/reference/_meta.json b/pages/sdk-auth-kit/reference/_meta.json
new file mode 100644
index 00000000..e8a0848c
--- /dev/null
+++ b/pages/sdk-auth-kit/reference/_meta.json
@@ -0,0 +1,4 @@
+{
+ "auth-kit-base-pack": "AuthKitBasePack",
+ "safe-auth-pack": "SafeAuthPack"
+}
diff --git a/reference/safe-core-sdk/auth-kit/AuthKitBasePack.md b/pages/sdk-auth-kit/reference/auth-kit-base-pack.md
similarity index 67%
rename from reference/safe-core-sdk/auth-kit/AuthKitBasePack.md
rename to pages/sdk-auth-kit/reference/auth-kit-base-pack.md
index 81125fb9..cf326f7d 100644
--- a/reference/safe-core-sdk/auth-kit/AuthKitBasePack.md
+++ b/pages/sdk-auth-kit/reference/auth-kit-base-pack.md
@@ -20,23 +20,27 @@ class MyPack extends AuthKitBasePack {
}
```
-## Abstract methods that Auth packs have to implement
+## Abstract methods and properties that any pack must implement
-These methods are the common interface for all the Auth packs. Check each pack's documentation to get more details.
+These methods and properties are the common interface for all the Auth packs. Check each pack's documentation for more details.
-### `init(options?)`
+### `isAuthenticated(): boolean`
+
+Any pack extending the `AuthKitBasePack` class must implement the `isAuthenticated()` getter. This method returns a `boolean` indicating whether the user is authenticated.
+
+### `init(options?): Promise`
Provides the initialization options for the required packages, classes and properties.
-### `signIn(): authKitSignInData`
+### `signIn(): Promise`
Provides a mechanism to connect to the provider services and returns an Ethereum address that will be used as a signer along with the associated Safe addresses.
-### `signOut()`
+### `signOut(): Promise`
Disconnects the provider services and cleans up any data related to the current user.
-### `getProvider(): web3Provider`
+### `getProvider(): AuthKitEthereumProvider | null`
Returns a Web3 provider that can be used to interact with the blockchain (`web3.js` or `ethers.js` for example).
@@ -56,19 +60,30 @@ Provides a way to unsubscribe from an event.
These methods provide the functionality associated with Safe so they can be used in the implementation of the packs.
-### `getAddress(): address`
+### `getSafes(txServiceUrl?): Promise`
+
+Returns the list of Safes associated with the signer address by internally calling the `getAddress()` method.
+
+**Parameters**
+
+- `txServiceUrl`(optional): The Safe Transaction Service URL to retrieve the Safes associated with the owner (signer).
+
+**Returns**
+
+- `safes[]`: The list of Safes associated with the owner (signer).
+
+### `getAddress(): Promise`
Returns the Ethereum address extracted from the provider retrieved by `getProvider()`. This returns a Safe owner (signer).
**Returns**
-- `address`: The Ethereum address extracted from the provider.
-### `getSafes(txServiceUrl): safes[]`
+- `address`: The Ethereum address extracted from the provider.
-Returns the list of Safes associated with the signer address by calling the `getAddress()` method internally.
+### `getChainId(): Promise`
-**Params**
-- `txServiceUrl`: The Safe Transaction Service url to retrieve the Safes associated with the owner (signer).
+Returns the chain ID of the connected network.
**Returns**
-- `safes[]`: The list of Safes associated with the owner (signer).
+
+- `chainId`: The chain ID extracted from the provider.
\ No newline at end of file
diff --git a/pages/sdk-auth-kit/reference/safe-auth-pack.md b/pages/sdk-auth-kit/reference/safe-auth-pack.md
new file mode 100644
index 00000000..663d3631
--- /dev/null
+++ b/pages/sdk-auth-kit/reference/safe-auth-pack.md
@@ -0,0 +1,220 @@
+# SafeAuthPack
+
+SafeAuth is a pluggable authentication infrastructure for web3 wallets and applications. It simplifies onboarding for mainstream and crypto native users, offering experiences tailored to their preferences. It supports all social logins, web and mobile native platforms, wallets, and other key management methods, creating a cryptographic key provider specific to the user and application.
+
+The `SafeAuthPack` enables using the [Web3Auth infrastructure](https://web3auth.io) with added Safe capabilities, such as retrieving the related Safe addresses for a given externally-owned account created using SafeAuth services.
+
+The pack helps onboard web2 users and provides an Ethereum signer address that can be used across any dapp using the different Ethereum chains.
+
+## Install dependencies
+
+To use the `SafeAuthPack`, you must install the `@safe-global/auth-kit` package and the corresponding Web3Auth one.
+
+```bash
+yarn add @safe-global/auth-kit @web3auth/safeauth-embed
+```
+
+## Reference
+
+The `SafeAuthPack` class makes SafeAuth modal and Safe accounts work together. Create an instance of the pack and initialize it to start the interaction.
+
+```typescript
+const safeAuthPack = new SafeAuthPack({
+ txServiceUrl: 'https://safe-transaction-mainnet.safe.global',
+});
+await safeAuthPack.init(safeAuthInitOptions);
+```
+
+### `new SafeAuthPack(safeAuthConfig)`
+
+**Parameters**
+
+- `safeAuthConfig?` - The `SafeAuthPack` class instantiation accepts the following options in its configuration:
+
+```typescript
+SafeAuthConfig {
+ txServiceUrl?: string
+}
+```
+
+- `txServiceUrl?` - The URL of the Safe Transaction Service. It's mandatory in chains where Safe doesn't provide a Transaction Service. It retrieves the Safe addresses for an EOA created using SafeAuth services.
+
+**Caveats**
+You should always call the `init()` method afterward before interacting with the pack.
+
+### `init(safeAuthInitOptions)`
+
+The init method initializes the provided Web3Auth SDK and Safe services. It creates an embedded browser wallet within an iframe, establishing communication through the internally generated EIP-1193 provider.
+
+**Parameters**
+
+- `safeAuthInitOptions` - The options to initialize the SDK instance.
+
+```typescript
+safeAuthInitOptions {
+ enableLogging?: boolean
+ showWidgetButton?: boolean
+ buttonPosition?: "bottom-left" | "top-left" | "bottom-right" | "top-right"
+ buildEnv?: "production" | "development" | "testing"
+ chainConfig?: {
+ blockExplorerUrl: string
+ logo: string
+ tickerName: string
+ ticker: string
+ rpcTarget: string
+ wcTarget?: string
+ chainId: string
+ displayName: string
+ isTestnet?: boolean
+ isErc20?: boolean
+ tokenAddress?: string
+ }
+}
+```
+
+- `enableLogging` - Enable logging for the SDK. Defaults to `false`.
+- `buildEnv` - The build environment. `production` and `testing` use `https://safe.web3auth.com`. `development` uses `http://localhost:4050`. Defaults to `production`.
+- `showWidgetButton` - Show the widget button. Defaults to `true`.
+- `buttonPosition` - If `showWidgetButton` is true then this prop represent the position of the widget button. Defaults to `bottom-left`.
+- `chainConfig` - The chain configuration. Defaults to `ethereum` if no configuration is provided.
+ - `blockExplorerUrl` - Block explorer URL of the chain (e.g `https://etherscan.io`).
+ - `logo` - Logo URL of the base token of the chain (e.g `https://eth.svg`).
+ - `tickerName` - Name for ticker (e.g Ethereum).
+ - `ticker` - Symbol for ticker (e.g ETH).
+ - `rpcTarget` - The RPC URL to be used.
+ - `wcTarget?` - The WebSocket URL to be used. Use this or `rpcTarget`.
+ - `chainId` - The chain ID to be used. Should be an hex with 0x prefix (e.g 0x1 for Mainnet).
+ - `displayName` - The display name for the network.
+ - `isTestnet?` - Whether the network is Testnet or not.
+ - `isErc20?`- Whether the token is an ERC20 token or not.
+ - `tokenAddress?` - The token address for the chain. Should be an hex with 0x prefix (e.g 0x6b175474e89094c44da98b954eedeac495271d0f for DAI).
+
+**Caveats**
+
+- The list of supported chains is:
+ - Production: Ethereum, Polygon, BSC, Avalanche, Optimism, Celo, Arbitrum, Gnosis chain.
+ - Test: Sepolia, Polygon Mumbai, BSC Testnet, Avalanche Testnet, Arbitrum Testnet, Optimism Testnet.
+- Call always the `init()` method before interacting with the other methods in the pack.
+- The `init()` method creates an iframe and establishes a connection with the embedded wallet domain. To remove the iframe and disconnect the connection, use the `signOut()` method. If you want to sign out and sign in again in a single-page application (SPA) fashion, avoid using `signOut({ reset: true })` as it will clean up the session, iframe, and connection. Instead, you will need to re-instantiate the pack.
+
+### `signIn(safeAuthSignInOptions?)`
+
+`signIn(safeAuthSignInOptions)` starts the authentication flow. It displays a popup that enables users to select a social authentication method (OAuth) or an email to generate the web3 wallet address. It returns the EOA and the associated Safe addresses.
+
+**Parameters**
+
+```typescript
+SafeAuthSignInOptions = {
+ loginProvider?: "google" | "facebook" | "reddit" | "discord" | "twitch" | "apple" | "line" | "github" | "kakao" | "linkedin" | "twitter" | "weibo" | "wechat" | "email_passwordless"
+ login_hint?: string
+}
+```
+
+- `loginProvider` - If specified, instead of showing the popup to choose the OAuth or email, a direct attempt to login with the specified provider will be made.
+
+- `login_hint` - Used to provide default mail given a `loginProvider`:
+
+```typescript
+safeAuthPack.signIn({
+ loginProvider: 'google',
+ login_hint: 'my-mail@safe.global',
+});
+```
+
+**Returns**
+
+An object with the derived externally-owned account address and the associated Safe addresses.
+
+```typescript
+AuthKitSignInData {
+ eoa: string
+ safes?: string[]
+}
+```
+
+**Caveats**
+
+- To get the Safe addresses, instantiate the `authKit` with the `txServiceUrl` property in the config object. Otherwise, only the EOA will be returned.
+- ⚠️ This method currently returns the Safe addresses where the EOA is an owner. It doesn't create a Safe. We're investigating ways to enhance the Auth Kit and the associated flows.
+
+### `signOut(safeAuthSignOutOptions?)`
+
+Call this method to sign out the user and clean the session.
+
+```typescript
+SafeAuthSignOutOptions {
+ reset: boolean;
+}
+```
+
+**Parameters**
+
+- `reset` - If true, the user will be logged out from the provider, and the widget will be destroyed. Don't use this parameter if you want to log out and log in again without refreshing the browser or re-initializing the `SafeAuthPack` instance.
+
+### `getUserInfo()`
+
+Using `getUserInfo()`, you will receive the user information derived from the pack you are using. It varies depending on the provider.
+
+**Returns**
+
+The `UserInfo` object's properties vary depending on the provider.
+
+### `getProvider()`
+
+By using `getProvider()`, you will receive a standard web3 provider compatible with the EIP-1193 standard.
+
+**Returns**
+
+A EIP-1193 compatible provider.
+
+**Caveats**
+
+- You can wrap the provider using your favorite library (ethers, web3, etc.).
+
+### `destroy()`
+
+This method removes the iframe. It's useful when you need to re-instantiate the pack, for example, when changing the connected chain.
+
+### `subscribe(event, handler)`
+
+Allow to subscribe to authentication state changes.
+
+**Parameters**
+
+- `event` - The event you want to subscribe to. Currently, you can subscribe to `accountsChanged` or `chainChanged`.
+- `handler` - When the event is triggered, the function will be called.
+
+### `unsubscribe(event, handler)`
+
+Allow to unsubscribe to authentication state changes.
+
+**Caveats**
+
+The `accountsChanged` event helps detect whether the user has previously signed in. This allows you to reauthenticate when the browser is refreshed by calling the `signIn` method, preventing the user from clicking the sign-in button again.
+
+**Parameters**
+
+- `event` - The event you want to unsubscribe to.
+- `handler` - The function will be called when the event is triggered.
+
+## Usage
+
+Calling `init()` when your page loads or component renders is all it takes to use the Auth Kit with the `SafeAuthPack`. To start the authentication process, call `signIn()` afterward. This method returns the EOA and associated Safe addresses.
+
+```typescript
+// Instantiate and initialize the pack
+const safeAuthPack = new SafeAuthPack(safeAuthConfig);
+await safeAuthPack.init(safeAuthInitOptions);
+
+const { eoa, safes } = await safeAuthPack.signIn();
+const userInfo = await safeAuthPack.getUserInfo();
+const web3Provider = safeAuthPack.getProvider();
+
+// Subscribe to events
+const handler = (event) => {};
+safeAuthPack.subscribe(packEvent, handler);
+safeAuthPack.unsubscribe(packEvent, handler);
+
+// Sign out
+await safeAuthPack.signOut();
+```
\ No newline at end of file
diff --git a/safe-core-sdk/onramp-kit/README.md b/pages/sdk-onramp-kit.md
similarity index 77%
rename from safe-core-sdk/onramp-kit/README.md
rename to pages/sdk-onramp-kit.md
index 0b028a85..22a8c0f0 100644
--- a/safe-core-sdk/onramp-kit/README.md
+++ b/pages/sdk-onramp-kit.md
@@ -3,8 +3,8 @@
The Onramp Kit helps users buy cryptocurrencies with fiat money to fund a Safe account via a credit card or other payment methods.
The following guides show how to use the Onramp Kit and integrate it into your project by using one of the packs:
-- [Monerium Pack](./monerium.md)
-- [Stripe Pack](./stripe.md)
+- [Monerium Pack](./sdk-onramp-kit/guides/monerium.md)
+- [Stripe Pack](./sdk-onramp-kit/guides/stripe.md)
## Resources
- [Onramp Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit)
diff --git a/pages/sdk-onramp-kit/_meta.json b/pages/sdk-onramp-kit/_meta.json
new file mode 100644
index 00000000..34c718ae
--- /dev/null
+++ b/pages/sdk-onramp-kit/_meta.json
@@ -0,0 +1,4 @@
+{
+ "guides": "Guides",
+ "reference": "Reference"
+}
diff --git a/pages/sdk-onramp-kit/guides/_meta.json b/pages/sdk-onramp-kit/guides/_meta.json
new file mode 100644
index 00000000..9520873d
--- /dev/null
+++ b/pages/sdk-onramp-kit/guides/_meta.json
@@ -0,0 +1,4 @@
+{
+ "stripe": "Stripe",
+ "monerium": "Monerium"
+}
diff --git a/safe-core-sdk/onramp-kit/monerium.md b/pages/sdk-onramp-kit/guides/monerium.md
similarity index 68%
rename from safe-core-sdk/onramp-kit/monerium.md
rename to pages/sdk-onramp-kit/guides/monerium.md
index 2fc5e9e4..5ebecb8c 100644
--- a/safe-core-sdk/onramp-kit/monerium.md
+++ b/pages/sdk-onramp-kit/guides/monerium.md
@@ -40,20 +40,21 @@ import { MoneriumPack } from '@safe-global/onramp-kit'
const moneriumPack = new MoneriumPack({
clientId: { YOUR_CLIENT_ID }, // Get your client id from Monerium
+ redirectUrl: 'https://your-site-redirect-url' // return URL after authenticating in Monerium
environment: 'sandbox' // Use the proper Monerium environment ('sandbox' | 'production')})
})
-await moneriumPack.init({ safeSdk })
+await moneriumPack.init({ protocolKit })
```
-The `safeSdk` is an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class. For more information on how to instantiate the `protocol-kit` refer to the [Protocol Kit Quickstart section](../protocol-kit/README.md).
+The `protocolKit` is an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class. For more information on how to instantiate the `protocol-kit` refer to the [Protocol Kit Quickstart section](../../sdk-protocol-kit.md).
-The `MoneriumPack` will use the Safe account address configured in the `safeSdk` to link to your Monerium account.
+The `MoneriumPack` will use the Safe account address configured in the `protocolKit` to link to your Monerium account.
2. Start the _Login with Monerium_ flow by creating a button or link in your application. Use your favorite UI library to add a handler and start the login flow. In the button handler you should start the flow by calling the `open` method:
```typescript
-await moneriumPack.open({ redirectUrl: 'https://your-site-redirect-url' })
+await moneriumPack.open({ initiateAuthFlow: true })
```
This action will open the Monerium web page to begin the authentication process and get the permissions to gain access to your information.
@@ -61,12 +62,12 @@ This action will open the Monerium web page to begin the authentication process
Take a look to the Monerium web page URL. You will see that the query string includes parameters such as these, among others:
- `address`: The Safe address you want to bind to your Monerium account.
-- `signature`: Always "0x". It means the origin wallet is a multisig, just like the Safe. Monerium will then verify for onchain signatures in your Safe contract
-- `chain`: The Monerium selected chain. The value is automatically calculated using the `safeSdk` instance.
-- `network`: The Monerium selected network. The value is automatically calculated using the `safeSdk` instance.
-- `redirect_uri`: The `redirectUrl` you sent in the `open` method. Once authenticated Monerium dashboard will redirect to that url.
+- `signature`: Always "0x." It means the origin wallet is a multisig, just like the Safe. Monerium will then verify for onchain signatures in your Safe contract.
+- `chain`: The Monerium selected chain. The value is automatically calculated using the `protocolKit` instance.
+- `network`: The Monerium selected network. The value is automatically calculated using the `protocolKit` instance.
+- `redirect_uri`: The `redirectUrl` you sent in the `MoneriumPack` constructor. Once authenticated Monerium dashboard will redirect to that URL.
-⚠️ It is important to be aware of what is happening during this initial interaction. A `signMessage` transaction accepting the [required Monerium message](https://monerium.dev/api-docs#operation/auth) will be proposed to your Safe the first time you try to link your Safe address. To confirm and execute it, you must also add the remaining signatures in the Safe UI and execute the transaction.
+⚠️ It's important to be aware of what's happening during this initial interaction. A `signMessage` transaction accepting the [required Monerium message](https://monerium.dev/api-docs#operation/auth) will be proposed to your Safe the first time you try to link your Safe address. To confirm and execute it, you must also add the remaining signatures in the Safe UI and execute the transaction.
Once you are in the Monerium web page, you should login or create a new account if you don't have one already.
@@ -74,17 +75,15 @@ After that, the Monerium UI, will wait until it detects the Safe address has sig
Note. If you use the `sandbox` environment, you can test this flow without KYC in `Goerli`. To use the mainnets for `ethereum`, `gnosis` or `polygon` in production, you need to create an account in the Monerium dashboard and complete KYC. The `production` environment involves real money, whereas the `sandbox` environment uses fake money and test tokens.
-3. Once you authenticate through the Monerium UI, a window will appear asking for permission to access your information. If you accept, control will be returned to the `redirectUrl` you specified in the `open` method.
+3. Once you authenticate through the Monerium UI, a window will appear asking for permission to access your information. If you accept, control will be returned to the `redirectUrl` you specified in the `MoneriumPack` constructor.
-4. The `redirectUrl` used in the `open` will be reached again with an extra query string parameter `code`. This is the authorization code you need to exchange in order to gain access to your Monerium account.
-
-Re-initialize the `MoneriumPack` using the `init` method and exchange the code, as per Step 1.
+4. Once we reach the `redirectUrl` we can call open again, now without using arguments.
```typescript
-const safeMoneriumClient = await moneriumPack.open({ authCode: '' })
+const safeMoneriumClient = await moneriumPack.open()
```
-If the code is exchanged successfully, you will be now authenticated with Monerium and your Safe will be linked!. You can start using the `safeMoneriumClient` instance to interact with your Monerium account. This instance is an enhanced version of the Monerium SDK, with some additional Safe features.
+If the process was successful, you will be now authenticated with Monerium and your Safe will be linked!. You can start using the `safeMoneriumClient` instance to interact with your Monerium account. This instance is an enhanced version of the Monerium SDK, with some additional Safe features.
To learn more about the methods you can use with the `safeMoneriumClient` instance, check the [Monerium SDK documentation](https://monerium.dev/docs/sdk).
@@ -97,24 +96,7 @@ const balances = await moneriumClient.getBalances()
const orders = await moneriumClient.getOrders()
```
-5. When you reload a page, you usually want to stay authenticated as long as the tokens are valid. To do this, we have another way to `open()` the `MoneriumPack`.
-
-Once authenticated in step 4, you can store the `refresh_token` found in the `bearerProfile` property of the `safeMoneriumClient` using browser storage methods.
-
-```typescript
-localStorage.setItem(
- 'MONERIUM_TOKEN',
- safeMoneriumClient.bearerProfile.refresh_token
-)
-```
-
-If the user leaves the session or reloads the browser, detect and retrieve the stored token on the next session or page load. Always `init` the `MoneriumPack` instance when the page loads as showed in the step 1.
-
-```typescript
-const safeMoneriumClient = await moneriumPack.open({
- refreshToken: localStorage.getItem('MONERIUM_TOKEN')
-})
-```
+5. When you reload a page, you usually want to stay authenticated as long as the tokens are valid. To do this, just call the `open()` method without arguments.
6. You're now ready to place orders. In the `production` environment, real funds will be transferred. In the `sandbox` environment, fake money will be used. If you add funds using the `sandbox` or create a transfer from your bank account to your Monerium IBAN in the `production` environment, you'll receive the corresponding tokens in your Safe. For example, if your Monerium IBAN is associated with the EURe token of your Safe, and you transfer 10 euros, the EURe balance of your Safe will be 10 after the SEPA system completes the transfer.
@@ -125,7 +107,6 @@ Once you have tokens, you can create a [`redeem` order](https://monerium.dev/api
```typescript
safeMoneriumClient.send({
amount: '10',
- currency: Currency.eur, // You can redeem the currency of your choice. Your Monerium IBAN will be linked to a single token.
counterpart: {
identifier: {
standard: 'iban',
@@ -149,9 +130,9 @@ Once you place your order, it will be sent to the destination account. Two thing
Once the transaction is recorded on the blockchain, the token is burned and the transfer of real money begins, completing the order 🚀.
-7. Listening to events is important for understanding what is happening around. It helps us to create a proper UI in our web page.
+7. Listening to events is important for understanding what's happening around. It helps us to create a proper UI in our web page.
-You probably want to know when the order is completed. For this you can listen to events using the [Monerium API websockets](https://monerium.dev/api-docs#operation/profile-orders-notifications)
+You probably want to know when the order is completed. For this you can listen to events using the [Monerium API web sockets](https://monerium.dev/api-docs#operation/profile-orders-notifications)
Connecting to the socket is easy, just use the `moneriumPack` instance along with the `subscribe()` and `unsubscribe()` methods.
@@ -184,4 +165,4 @@ moneriumPack.unsubscribe(OrderState.processed, handler)
## MoneriumPack complete React example
-Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repo. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample).
+Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repository. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample).
diff --git a/safe-core-sdk/onramp-kit/stripe.md b/pages/sdk-onramp-kit/guides/stripe.md
similarity index 80%
rename from safe-core-sdk/onramp-kit/stripe.md
rename to pages/sdk-onramp-kit/guides/stripe.md
index 80a2a88b..d23f21d6 100644
--- a/safe-core-sdk/onramp-kit/stripe.md
+++ b/pages/sdk-onramp-kit/guides/stripe.md
@@ -1,12 +1,12 @@
# Integration with Stripe
-The [Stripe Crypto OnRamp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application.
+The [Stripe Crypto Onramp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application.
## What are we going to learn?
-This guide demonstrates how to use the `StripePack` as part of the [`OnRampKit`](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) and incorporate it into your web application.
+This guide demonstrates how to use the `StripePack` as part of the [`OnrampKit`](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) and incorporate it into your web application.
-We are going to learn how to render the Stripe widget into your page. This widget allows the use your own Ethereum address for onramping cryptocurrencies. As [Stripe API](https://stripe.com/docs/crypto/using-the-api) usage [requires a server](https://stripe.com/docs/crypto/quickstart?client=html&lang=node) to start the interaction with their services, we will also be using a [pre-deployed server](https://github.com/5afe/aa-stripe-service) and providing a public key for testing purposes.
+We're going to learn how to render the Stripe widget into your page. This widget allows the use your own Ethereum address for onramping cryptocurrencies. As [Stripe API](https://stripe.com/docs/crypto/using-the-api) usage [requires a server](https://stripe.com/docs/crypto/quickstart?client=html&lang=node) to start the interaction with their services, we will also be using a [pre-deployed server](https://github.com/5afe/aa-stripe-service) and providing a public key for testing purposes.

@@ -15,7 +15,7 @@ We are going to learn how to render the Stripe widget into your page. This widge
1. [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
2. [Stripe account to get your own public and private keys](https://dashboard.stripe.com/register)
3. A deployed server ([example](https://github.com/5afe/aa-stripe-service)) for communicating with Stripe APIs.
- We are providing both the public key and the server for testing purposes but you must use your own public key and server in production.
+ We're providing both the public key and the server for testing purposes but you must use your own public key and server in production.
## Install dependencies
@@ -25,7 +25,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto
## Using the `StripePack` in your Web App
-The `StripePack` can be used with any frontend framework like Reactjs, Vuejs, Angular or even plain HTML and Javascript. In this example, we are using it with plain JavaScript.
+The `StripePack` can be used with any frontend framework like React, Vue, Angular or even plain HTML and JavaScript. In this example, we're using it with plain JavaScript.
1. Load the application and initialize the `StripePack` using the following snippet:
@@ -74,11 +74,11 @@ const sessionData = await stripePack.open({
Make sure you include the `element`. Otherwise, you may get the following error:
-
+
You can also specify the default options for the widget. For example, you can specify the default wallet address, supported destination networks, and supported destination currencies. See the [Stripe API documentation](https://stripe.com/docs/crypto/using-the-api) for more details. The default options you specify using the `open` method will be passed through the Stripe API when using our provided server. When you create your own one (you need to do it on your production apps) you should do something similar.
-4. Listening to events is important for understanding what is happening around. It helps us to create a proper UI in our web page.
+4. Listening to events is important for understanding what's happening around. It helps us to create a proper UI in our web page.
Check the [Stripe frontend events](https://stripe.com/docs/crypto/using-the-api#frontend-events) for the list of available events.
@@ -100,7 +100,7 @@ stripePack.unsubscribe('onramp_ui_loaded', uiLoadedHandler)
stripePack.unsubscribe('onramp_session_updated', sessionUpdatedHandler)
```
-## Testing my DApp containing the Stripe widget
+## Testing my dapp containing the Stripe widget
In production, each customer should pass an individual KYC process but probably you want to test your application before 😊. You can use the following test data for bypass the KYC process while in [test mode](https://stripe.com/docs/test-mode).
| **Field** | **Value** | **Description** |
@@ -123,10 +123,10 @@ In production, each customer should pass an individual KYC process but probably
| **CVC** | 123 | Use any CVC 123 |
| **Billing Zip Code** | 12345 | Use any zip code 12345 for billing |
-## OnRamp Kit KYC test data - Examples
+## Onramp Kit KYC test data - Examples
  
## StripePack complete React example
-Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repo. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables (`VITE_MONERIUM_CLIENT_ID` is not necessary) for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample).
+Check a complete [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) in the `safe-core-sdk` repository. Follow the steps in the [`README.md`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/README.md) to run the example and configure the environment variables (`VITE_MONERIUM_CLIENT_ID` isn't necessary) for the pack following the [`.env.sample`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client/.env.sample).
diff --git a/reference/safe-core-sdk/onramp-kit/README.md b/pages/sdk-onramp-kit/reference.md
similarity index 55%
rename from reference/safe-core-sdk/onramp-kit/README.md
rename to pages/sdk-onramp-kit/reference.md
index acf05bd1..96e7d977 100644
--- a/reference/safe-core-sdk/onramp-kit/README.md
+++ b/pages/sdk-onramp-kit/reference.md
@@ -1,22 +1,22 @@
-# OnRamp Kit
+# Reference
-The [OnRamp Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) allow users to access on-ramp services and use them with their Safes.
+The [Onramp Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit) allow users to access on-ramp services and use them with their Safes.
These services can be used to buy crypto assets with credit cards or make SEPA transfers between their Safe and bank accounts (Monerium).
## Install dependencies
-To add the OnRamp Kit to your project, run:
+To add the Onramp Kit to your project, run:
```bash
yarn add @safe-global/onramp-kit
```
-The OnRamp Kit can integrate several providers in the form of "packs". A pack is a piece of code that works with the chosen provider to give Safe users access to new services.
+The Onramp Kit can integrate several providers in the form of **"packs."** A pack is a piece of code that works with the chosen provider to give Safe users access to new services.
To use each pack, the right package needs to be installed:
-- [Monerium](./MoneriumPack.md#install)
-- [Stripe](./StripePack.md#install)
+- [Monerium](./reference/monerium-pack.md#install)
+- [Stripe](./reference/stripe-pack.md#install)
## How to use a pack
@@ -29,6 +29,6 @@ await pack.init(packInitOptions)
After the initialization, use the methods in the pack to interact with the chosen provider.
-There are some common methods (`open()`, `close()`, etc.) that can be called regardless of the package being used.
+Some common methods (`open()`, `close()`, etc.) can be called regardless of the package being used.
-The kit creates a common interface that any pack should implement. Check the [`OnRampKitBasePack`](./OnRampKitBasePack.md) abstract class to get more details.
+The kit creates a common interface that any pack should implement. Check the [`OnRampKitBasePack`](./reference/onramp-kit-base-pack.md) abstract class to get more details.
diff --git a/pages/sdk-onramp-kit/reference/_meta.json b/pages/sdk-onramp-kit/reference/_meta.json
new file mode 100644
index 00000000..fc08f849
--- /dev/null
+++ b/pages/sdk-onramp-kit/reference/_meta.json
@@ -0,0 +1,5 @@
+{
+ "onramp-kit-base-pack": "OnRampKitBasePack",
+ "stripe-pack": "StripePack",
+ "monerium-pack": "MoneriumPack"
+}
\ No newline at end of file
diff --git a/reference/safe-core-sdk/onramp-kit/MoneriumPack.md b/pages/sdk-onramp-kit/reference/monerium-pack.md
similarity index 76%
rename from reference/safe-core-sdk/onramp-kit/MoneriumPack.md
rename to pages/sdk-onramp-kit/reference/monerium-pack.md
index bd01aa58..55e2df12 100644
--- a/reference/safe-core-sdk/onramp-kit/MoneriumPack.md
+++ b/pages/sdk-onramp-kit/reference/monerium-pack.md
@@ -4,21 +4,22 @@ Monerium Pack enables using Safe with [Monerium](https://monerium.com), a regula
## Install dependencies
-To use the `MoneriumPack`, you need to install the monerium SDK in addition to the `@safe-global/onramp-kit` package.
+To use the `MoneriumPack`, you need to install the Monerium SDK in addition to the `@safe-global/onramp-kit` package.
```bash
-yarn add @safe-global/onramp-kit @monerium/sdk
+yarn add @safe-global/onramp-kit @safe-global/protocol-kit @monerium/sdk
```
## Reference
-The `MoneriumPack` class enables the use of Monerium services with Safe. To use it, create an instance of the pack and pass it to the `SafeOnRampKit` `init` method.
+The `MoneriumPack` class enables the use of Monerium services with Safe. To use it, create an instance of the pack and pass it to the `SafeOnrampKit` `init` method.
This pack allows you to "Login with Monerium" by creating a connection between your Safe address and your Monerium account. This pack starts an authentication flow that uses the Monerium SDK to gain access to your account.
```typescript
const moneriumPack = new MoneriumPack({
clientId: 'YOUR_CLIENT_ID',
+ redirectUrl: 'URL_AFTER_AUTHENTICATION'
environment: 'sandbox'
})
await moneriumPack.init(moneriumInitOptions)
@@ -26,22 +27,25 @@ await moneriumPack.init(moneriumInitOptions)
### `new MoneriumPack(moneriumConfig)`
-**Params**
+**Parameters**
- `moneriumConfig` - The configuration for the Monerium pack. The options are:
```typescript
-MoneriumConfig {
+MoneriumProviderConfig {
clientId: string
+ redirectUrl: string
environment: 'production' | 'sandbox'
}
```
The `clientId` is the secret representing the "Authorization Code Flow" for your Monerium account. To get your `clientId`:
-1. Log in to [your account](https://monerium.dev)
+1. Log in to [your account](https://monerium.dev).
2. Create a [new application](https://monerium.dev/docs/getting-started/create-app).
+The `redirectUrl` is an URI that will be used to send the user back to the app after they complete the authentication process.
+
The `environment` is the environment for the Monerium SDK. You can choose between `production` and `sandbox`.
The `production` environment will use the production Monerium services and the accounts will need to go through a KYC process. Real money will be transferred. The sandbox environment will use the Monerium [sandbox services](https://sandbox.monerium.dev) and no KYC is required. Fake money will be used.
@@ -51,42 +55,35 @@ You should always call the `init()` method afterwards before interacting with th
### `init(moneriumInitOptions)`
-The `init` method initializes the Monerium SDK and the Safe services by creating a new instance of the [`SafeMoneriumClient`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/src/packs/monerium/SafeMoneriumClient.ts) class. This class extends the [`MoneriumClient`](https://github.com/monerium/sdk/blob/main/src/client.ts) class from the Monerium SDK and adds extra features to use it with the Safe services.
+The `init` method initializes the Monerium SDK and the Safe services by creating a new instance of the [`SafeMoneriumClient`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/src/packs/monerium/SafeMoneriumClient.ts) class. This class extends the [`MoneriumClient`](https://github.com/monerium/js-sdk/blob/main/libs/sdk/src/client.ts) class from the Monerium SDK and adds extra features to use it with the Safe services.
-**Params**
+**Parameters**
The `MoneriumInitOptions` options to be passed to the `init` method are:
```typescript
MoneriumInitOptions {
- safeSdk: Safe
+ protocolKit: Safe
}
```
-- `safeSdk` - To use the `MoneriumPack`, you need to add Protocol Kit as a dependency for your project and create an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class.
+- `protocolKit` - To use the `MoneriumPack`, you need to add Protocol Kit as a dependency for your project and create an instance of the [`Safe`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/Safe.ts) class.
### `open(moneriumOpenOptions)`
The `open()` method initiates the authentication process with Monerium. It opens a popup window with the Monerium authentication page.
-**Params**
+**Parameters**
The `MoneriumOpenOptions` options to be passed to the `open` method are:
```typescript
MoneriumOpenOptions {
- redirectUrl?: string
- authCode?: string
- refreshToken?: string
+ initiateAuthFlow?: boolean
}
```
-- `redirectUrl` - The Monerium SDK requires a redirect URL. This URI will be used to send the user back to the app after they complete the authentication process.
- If you Use the open method with the `redirectUrl` parameter alone. This will open the Monerium web page for Sign In or Sign Up.
-
-- `authCode` - This code is returned as a query parameter (auth_code) after an user has successfully signed in or signed up. The typical use case for this code is to get access to the resources (Get a token) through the Monerium SDK. Once authenticated, the dApp can call again the `open()` method with then `authCode` obtained from the query string.
-
-- `refreshToken` - This token will be used to get access to the resources through the Monerium SDK. The typical use case should be to keep it in the browser storage after authenticating with the `authCode` and use it to authenticate in subsequent application openings by calling the `open()` method with the `refreshToken` alone.
+- `initiateAuthFlow` - This flag should be added the first time `open()` is called to prompt the user to the authorization flow. Once authenticated, the dApp can call again the `open()` method to get the `MoneriumClient`.
Take a look to [the example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/onramp-kit/example/client) for more information.
@@ -118,13 +115,13 @@ And it will do the following:
**Caveats**
-- The order we use internally in the SDK for evaluating the `redirectUrl`, `authCode` and `refreshToken` is important. Each property opens a different flow with Monerium and we evaluate the presence of the `authCode`, then the `refreshToken` and `redirectUrl` as default. So have this in mind if you use all of them together in yout app
+- The order we use internally in the SDK for evaluating the `redirectUrl`, `authCode` and `refreshToken` is important. Each property opens a different flow with Monerium and we evaluate the presence of the `authCode`, then the `refreshToken` and `redirectUrl` as default. Have this in mind if you use all of them together in your app
### `subscribe(event, handler)`
You can subscribe to [order status changes](https://monerium.dev/api-docs#operation/profile-orders-notifications) through the Monerium API.
-**Params**
+**Parameters**
- `event` - The event you want to subscribe to. You can choose between one of the following:
@@ -143,7 +140,7 @@ MoneriumEvent {
Allow to unsubscribe to authentication state changes.
-**Params**
+**Parameters**
- `event` - The event you want to unsubscribe to.
- `handler` - The handler function that will be called when the event is triggered.
@@ -161,7 +158,7 @@ The `open` method starts the interaction with the pack and returns the Monerium
```typescript
// Instantiate and initialize the pack
const moneriumPack = new MoneriumPack(moneriumConfig)
-moneriumPack.init({ safeSdk })
+moneriumPack.init({ protocolKit })
// Open
const safeMoneriumClient = await moneriumPack.open(moneriumPackOpenOptions)
@@ -173,4 +170,4 @@ moneriumPack.unsubscribe(MoneriumEvent.processed, handler)
// Close
await moneriumPack.close()
-```
\ No newline at end of file
+```
diff --git a/reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md b/pages/sdk-onramp-kit/reference/onramp-kit-base-pack.md
similarity index 89%
rename from reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md
rename to pages/sdk-onramp-kit/reference/onramp-kit-base-pack.md
index c25bee6b..ad77d7e8 100644
--- a/reference/safe-core-sdk/onramp-kit/OnRampKitBasePack.md
+++ b/pages/sdk-onramp-kit/reference/onramp-kit-base-pack.md
@@ -20,9 +20,9 @@ class MyPack extends OnRampKitBasePack {
}
```
-## Abstract methods that OnRamp packs must implement
+## Abstract methods that Onramp packs must implement
-These methods are the common interface for all the OnRamp packs. Check each pack's documentation to get more details.
+These methods are the common interface for all the Onramp packs. Check each pack's documentation to get more details.
### init(options?)
@@ -30,7 +30,7 @@ Provides the initialization options for the required packages, classes and prope
### open(options)
-Initiates the interaction with the pack. It can create a widget (e.g. Stripe) or redirect to a website (e.g. Monerium).
+Initiates the interaction with the pack. It can create a widget (for example Stripe) or redirect to a website (for example Monerium).
It returns the outcome of interacting with the pack.
diff --git a/reference/safe-core-sdk/onramp-kit/StripePack.md b/pages/sdk-onramp-kit/reference/stripe-pack.md
similarity index 83%
rename from reference/safe-core-sdk/onramp-kit/StripePack.md
rename to pages/sdk-onramp-kit/reference/stripe-pack.md
index 2321f531..9851989b 100644
--- a/reference/safe-core-sdk/onramp-kit/StripePack.md
+++ b/pages/sdk-onramp-kit/reference/stripe-pack.md
@@ -1,6 +1,6 @@
# StripePack
-[Stripe Crypto OnRamp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application.
+[Stripe Crypto Onramp service](https://stripe.com/docs/crypto/overview) allows individuals to securely purchase cryptocurrencies from your application.
## Install dependencies
@@ -12,7 +12,7 @@ yarn add @safe-global/onramp-kit @stripe/stripe-js @stripe/crypto
## Reference
-The `StripePack` allows users to use the Stripe Crypto OnRamp services with Safe.
+The `StripePack` allows users to use the Stripe Crypto Onramp services with Safe.
This pack provides a customizable widget for users to purchase cryptocurrencies using Stripe services and it can be rendered in a DOM node on a webpage.
@@ -23,7 +23,7 @@ await stripePack.init()
### new StripePack(stripeConfig)
-**Params**
+**Parameters**
- `stripeConfig` - The configuration for the Stripe pack. The options are:
@@ -36,7 +36,7 @@ StripeConfig {
The `stripePublicKey` is the public key for your Stripe account. You can get one using [your account](https://stripe.com/docs/keys#obtain-api-keys)
-The `onRampBackendUrl` is the URL for the backend that starts a session with Stripe. For more information on how to create the server, refer to the [official documentation](https://stripe.com/docs/crypto/quickstart#init-stripe). You can also check out the example application and server in the [Safe{Core} SDK monorepo](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit/example/server).
+The `onRampBackendUrl` is the URL of the backend that starts a session with Stripe. For more information on how to create the server, refer to the [official documentation](https://stripe.com/docs/crypto/quickstart#init-stripe). You can also check out the example application and server in the [Safe{Core} SDK monorepo](https://github.com/safe-global/safe-core-sdk/tree/main/packages/onramp-kit/example/server).
**Caveats**
You should always call the `init()` method afterwards before interacting with the pack.
@@ -49,7 +49,7 @@ Loads the Stripe scripts using the public key provided in the class instantiatio
Opens the Stripe widget in the chosen DOM node (CSS selector) inside a webpage.
-**Params**
+**Parameters**
The options to be passed to this method are:
@@ -69,13 +69,13 @@ StripeOpenOptions {
### close()
-Closes the Stripe widget. This method shouldn't be called directly but using the `SafeOnRampKit` `close` method instead.
+Closes the Stripe widget. This method shouldn't be called directly but using the `SafeOnrampKit` `close` method instead.
### subscribe(event, handler)
Subscribes to authentication state changes. Check the [Stripe frontend events](https://stripe.com/docs/crypto/using-the-api#frontend-events) for the list of available events.
-**Params**
+**Parameters**
- `event` - The event you want to subscribe from.
- `handler` - The handler function that will be called when the event is triggered.
@@ -84,7 +84,7 @@ Subscribes to authentication state changes. Check the [Stripe frontend events](h
Unsubscribes from authentication state changes.
-**Params**
+**Parameters**
- `event` - The event you want to unsubscribe from.
- `handler` - The handler function that will be called when the event is triggered.
diff --git a/safe-core-sdk/README.md b/pages/sdk-overview.md
similarity index 63%
rename from safe-core-sdk/README.md
rename to pages/sdk-overview.md
index cd8f76d3..b62bf8cf 100644
--- a/safe-core-sdk/README.md
+++ b/pages/sdk-overview.md
@@ -1,12 +1,12 @@
-# Safe{Core} Account Abstraction SDK
+# Safe\{Core\} Account Abstraction SDK
-The Safe{Core} Account Abstraction (AA) SDK aims to bring Account Abstraction to life by integrating Safe with different third parties. This SDK helps developers to abstract the complexity of setting up a smart contract account.
+The Safe\{Core\} Account Abstraction (AA) SDK aims to bring Account Abstraction to life by integrating Safe with different third parties. This SDK helps developers to abstract the complexity of setting up a smart contract account.
## Architecture
The SDK groups its functionality into five different kits.
-
+
### Auth Kit
@@ -29,5 +29,5 @@ The Relay Kit relays Safe transactions, allowing you to get them sponsored by a
The API Kit helps interact with the Safe Transaction Service API. It helps share transactions among the signers and get information from a Safe account. For example, the configuration or transaction history.
## Resources
-- [Safe{Core} Account Abstraction SDK on GitHub](https://github.com/safe-global/safe-core-sdk)
-- [Safe{Core} Account Abstraction SDK demo application](https://github.com/5afe/account-abstraction-demo-ui)
+- [Safe\{Core\} Account Abstraction SDK on GitHub](https://github.com/safe-global/safe-core-sdk)
+- [Safe\{Core\} Account Abstraction SDK demo application](https://github.com/5afe/account-abstraction-demo-ui)
diff --git a/safe-core-sdk/protocol-kit/README.md b/pages/sdk-protocol-kit.md
similarity index 69%
rename from safe-core-sdk/protocol-kit/README.md
rename to pages/sdk-protocol-kit.md
index 019be1a6..7b8116d5 100644
--- a/safe-core-sdk/protocol-kit/README.md
+++ b/pages/sdk-protocol-kit.md
@@ -6,25 +6,25 @@ The [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packag
In this quickstart guide, you will create a 2 of 3 multi-sig Safe and propose and execute a transaction to send some ETH out of this Safe.
-For a more detailed guide, including how to integrate with `web3.js`` and more Safe transaction configuration options, see [Guide: Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and [Protocol Kit Reference](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#sdk-api).
+For a more detailed guide, including how to integrate with `web3.js` and more Safe transaction configuration options, see [Guide: Integrating the Protocol Kit and API Kit](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md) and [Protocol Kit Reference](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#sdk-api).
### Prerequisites
1. [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
-2. 3 externally-owned accounts with testnet ETH in at least one account
+2. Three externally-owned accounts with Testnet ETH in at least one account
### Install dependencies
-First, we'll need to install some dependences from `safe-core-sdk` and the `ethers` library.
+First, we'll need to install some dependencies from `safe-core-sdk` and the `ethers` library.
To interact with Ethereum and other EVM blockchains in Node, we can either use: web3.js or ethers.js. In this tutorial, we'll use the ethers.js library. To use `web3js`, see [Instantiate an EthAdapter section in Guide: Integrating the Safe Core SDK](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#instantiate-an-ethadapter).
-The Protocol Kit is compatible with ethers v4 and v5, not the latest v6 version so make sure you specify this when installing the SDK.
+The Protocol Kit's compatible only with **ethers.js v6**. Make sure you specify this version when installing the SDK.
You can store your environment variables such as private keys in a `.env` file. To read easily from `.env` files, use the `dotenv` library.
```bash
-yarn add ethers@5.7.2 @safe-global/protocol-kit \
+yarn add ethers @safe-global/protocol-kit \
@safe-global/api-kit \
@safe-global/safe-core-sdk-types \
dotenv
@@ -62,7 +62,7 @@ The signers trigger transactions to the Ethereum blockchain or off-chain transac
You can get a public RPC URL from [Chainlist](https://chainlist.org), however, public RPC URLs can be unreliable so you can also try a dedicated provider like Infura or Alchemy.
-For this tutorial, we will be creating a Safe on the Goerli testnet.
+For this tutorial, we will be creating a Safe on the Sepolia Testnet.
```tsx
import { ethers } from 'ethers'
@@ -71,9 +71,9 @@ import dotenv from 'dotenv'
dotenv.config()
-// https://chainlist.org/?search=goerli&testnets=true
-const RPC_URL='https://eth-goerli.public.blastapi.io'
-const provider = new ethers.providers.JsonRpcProvider(RPC_URL)
+// https://chainlist.org/?search=sepolia&testnets=true
+const RPC_URL='https://eth-sepolia.public.blastapi.io'
+const provider = new ethers.JsonRpcProvider(RPC_URL)
// Initialize signers
const owner1Signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider)
@@ -88,20 +88,28 @@ const ethAdapterOwner1 = new EthersAdapter({
### Initialize the API Kit
-The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) consumes the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). To start using this library, create a new instance of the `SafeApiKit` class, imported from `@safe-global/api-kit`, and pass the Safe Transaction Service URL for your desired network to the constructor of the `SafeApiKit`.
+The [API Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/api-kit) consumes the [Safe Transaction Service API](https://github.com/safe-global/safe-transaction-service). To use this library, create a new instance of the `SafeApiKit` class, imported from `@safe-global/api-kit`. In chains where Safe provides a Transaction Service, it's enough to specify the `chainId.` You can specify your own service using the optional `txServiceUrl` parameter.
-You will be using Goerli for this tutorial, however, you can also get [service URLs for different networks](../../safe-core-api/available-services.md).
+You will be using Sepolia for this tutorial, however, you can also get [service URLs for different networks](./api-supported-networks.md).
```tsx
import SafeApiKit from '@safe-global/api-kit'
-const txServiceUrl = 'https://safe-transaction-goerli.safe.global'
-const safeService = new SafeApiKit({ txServiceUrl, ethAdapter: ethAdapterOwner1 })
+const apiKit = new SafeApiKit({
+ chainId: 1n
+})
+
+
+// or using a custom service
+const apiKit = new SafeApiKit({
+ chainId: 1n, // set the correct chainId
+ txServiceUrl: 'https://url-to-your-custom-service'
+})
```
### Initialize the Protocol Kit
-Goerli is a supported network so you don't need to specify the contract addresses, however, to see how to create a safe on a local or unsupported network, see [Instantiate an EthAdapter](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#instantiate-an-ethadapter).
+Sepolia is a supported network so you don't need to specify the contract addresses, however, to see how to create a safe on a local or unsupported network, see [Instantiate an EthAdapter](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#instantiate-an-ethadapter).
Safe Factory is used to create Safes. While Safe class represents an instance of a specific Safe account.
@@ -130,13 +138,13 @@ const safeAccountConfig: SafeAccountConfig = {
/* This Safe is tied to owner 1 because the factory was initialized with
an adapter that had owner 1 as the signer. */
-const safeSdkOwner1 = await safeFactory.deploySafe({ safeAccountConfig })
+const protocolKitOwner1 = await safeFactory.deploySafe({ safeAccountConfig })
-const safeAddress = await safeSdkOwner1.getAddress()
+const safeAddress = await protocolKitOwner1.getAddress()
console.log('Your Safe has been deployed:')
-console.log(`https://goerli.etherscan.io/address/${safeAddress}`)
-console.log(`https://app.safe.global/gor:${safeAddress}`)
+console.log(`https://sepolia.etherscan.io/address/${safeAddress}`)
+console.log(`https://app.safe.global/sep:${safeAddress}`)
```
### Send ETH to the Safe
@@ -144,9 +152,9 @@ console.log(`https://app.safe.global/gor:${safeAddress}`)
You will send some ETH to this Safe.
```tsx
-const safeAddress = safeSdk.getAddress()
+const safeAddress = protocolKit.getAddress()
-const safeAmount = ethers.utils.parseUnits('0.01', 'ether').toHexString()
+const safeAmount = ethers.parseUnits('0.01', 'ether').toHexString()
const transactionParameters = {
to: safeAddress,
@@ -156,7 +164,7 @@ const transactionParameters = {
const tx = await owner1Signer.sendTransaction(transactionParameters)
console.log('Fundraising.')
-console.log(`Deposit Transaction: https://goerli.etherscan.io/tx/${tx.hash}`)
+console.log(`Deposit Transaction: https://sepolia.etherscan.io/tx/${tx.hash}`)
```
## Making a transaction from a Safe
@@ -187,19 +195,19 @@ The high-level overview of a multi-sig transaction is PCE: Propose. Confirm. Exe
For more details on what to include in a transaction see [Create a Transaction in the Safe Core SDK Guide](https://github.com/safe-global/safe-core-sdk/blob/main/guides/integrating-the-safe-core-sdk.md#4-create-a-transaction).
```tsx
-import { SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types'
+import { MetaTransactionData } from '@safe-global/safe-core-sdk-types'
// Any address can be used. In this example you will use vitalik.eth
const destination = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
-const amount = ethers.utils.parseUnits('0.005', 'ether').toString()
+const amount = ethers.parseUnits('0.005', 'ether').toString()
-const safeTransactionData: SafeTransactionDataPartial = {
+const safeTransactionData: MetaTransactionData = {
to: destination,
data: '0x',
value: amount
}
// Create a Safe transaction with the provided parameters
-const safeTransaction = await safeSdkOwner1.createTransaction({ safeTransactionData })
+const safeTransaction = await protocolKitOwner1.createTransaction({ transactions: [safeTransactionData] })
```
### Propose the transaction
@@ -210,12 +218,12 @@ For a full list and description of the properties that `proposeTransaction` acce
```tsx
// Deterministic hash based on transaction parameters
-const safeTxHash = await safeSdkOwner1.getTransactionHash(safeTransaction)
+const safeTxHash = await protocolKitOwner1.getTransactionHash(safeTransaction)
// Sign transaction to verify that the transaction is coming from owner 1
-const senderSignature = await safeSdkOwner1.signTransactionHash(safeTxHash)
+const senderSignature = await protocolKitOwner1.signHash(safeTxHash)
-await safeService.proposeTransaction({
+await apiKit.proposeTransaction({
safeAddress,
safeTransactionData: safeTransaction.data,
safeTxHash,
@@ -226,13 +234,13 @@ await safeService.proposeTransaction({
### Get pending transactions
-Recall that you created the `safeService` in [Initialize the API Kit](./#initialize-the-safe-api-kit).
+Recall that you created the `apiKit` in [Initialize the API Kit](./#initialize-the-safe-api-kit).
```tsx
-const pendingTransactions = await safeService.getPendingTransactions(safeAddress).results
+const pendingTransactions = await apiKit.getPendingTransactions(safeAddress).results
```
-### Confirm the transaction: second confirmation
+### Confirm the transaction: Second confirmation
When owner 2 is connected to the application, the Protocol Kit should be initialized again with the existing Safe address the address of the owner 2 instead of the owner 1.
@@ -246,13 +254,13 @@ const ethAdapterOwner2 = new EthersAdapter({
signerOrProvider: owner2Signer
})
-const safeSdkOwner2 = await Safe.create({
+const protocolKitOwner2 = await Safe.create({
ethAdapter: ethAdapterOwner2,
safeAddress
})
-const signature = await safeSdkOwner2.signTransactionHash(safeTxHash)
-const response = await safeService.confirmTransaction(safeTxHash, signature.data)
+const signature = await protocolKitOwner2.signHash(safeTxHash)
+const response = await apiKit.confirmTransaction(safeTxHash, signature.data)
```
### Execute the transaction
@@ -260,12 +268,12 @@ const response = await safeService.confirmTransaction(safeTxHash, signature.data
Anyone can execute the Safe transaction once it has the required number of signatures. In this example, owner 1 will execute the transaction and pay for the gas fees.
```tsx
-const safeTransaction = await safeService.getTransaction(safeTxHash)
-const executeTxResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await apiKit.getTransaction(safeTxHash)
+const executeTxResponse = await protocolKit.executeTransaction(safeTransaction)
const receipt = await executeTxResponse.transactionResponse?.wait()
console.log('Transaction executed:')
-console.log(`https://goerli.etherscan.io/tx/${receipt.transactionHash}`)
+console.log(`https://sepolia.etherscan.io/tx/${receipt.transactionHash}`)
```
### Confirm that the transaction was executed
@@ -273,9 +281,9 @@ console.log(`https://goerli.etherscan.io/tx/${receipt.transactionHash}`)
You know that the transaction was executed if the balance in your Safe changes.
```tsx
-const afterBalance = await safeSdk.getBalance()
+const afterBalance = await protocolKit.getBalance()
-console.log(`The final balance of the Safe: ${ethers.utils.formatUnits(afterBalance, 'ether')} ETH`)
+console.log(`The final balance of the Safe: ${ethers.formatUnits(afterBalance, 'ether')} ETH`)
```
```bash
diff --git a/reference/safe-core-sdk/protocol-kit/README.md b/pages/sdk-protocol-kit/reference.md
similarity index 51%
rename from reference/safe-core-sdk/protocol-kit/README.md
rename to pages/sdk-protocol-kit/reference.md
index ed4d131d..b8c66014 100644
--- a/reference/safe-core-sdk/protocol-kit/README.md
+++ b/pages/sdk-protocol-kit/reference.md
@@ -1,4 +1,4 @@
-# Protocol Kit
+# Reference
The [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit) facilitates the interaction with the [Safe contracts](https://github.com/safe-global/safe-contracts).
@@ -22,19 +22,19 @@ import { SafeFactory } from '@safe-global/protocol-kit'
const safeFactory = await SafeFactory.create({ ethAdapter })
```
-- The `isL1SafeMasterCopy` flag
+- The `isL1SafeSingleton` flag
- There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
+ Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
- By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract.
+ By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract.
```typescript
- const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: true })
+ const safeFactory = await SafeFactory.create({ ethAdapter, isL1SafeSingleton: true })
```
- The `contractNetworks` property
- If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
+ If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
```typescript
import { ContractNetworksConfig } from '@safe-global/protocol-kit'
@@ -42,7 +42,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter })
const chainId = await ethAdapter.getChainId()
const contractNetworks: ContractNetworksConfig = {
[chainId]: {
- safeMasterCopyAddress: '',
+ safeSingletonAddress: '',
safeProxyFactoryAddress: '',
multiSendAddress: '',
multiSendCallOnlyAddress: '',
@@ -50,7 +50,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter })
signMessageLibAddress: '',
createCallAddress: '',
simulateTxAccessorAddress: '',
- safeMasterCopyAbi: '', // Optional. Only needed with web3.js
+ safeSingletonAbi: '', // Optional. Only needed with web3.js
safeProxyFactoryAbi: '', // Optional. Only needed with web3.js
multiSendAbi: '', // Optional. Only needed with web3.js
multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js
@@ -75,7 +75,7 @@ const safeFactory = await SafeFactory.create({ ethAdapter })
### `deploySafe`
-Deploys a new Safe and returns an instance of the Protocol Kit connected to the deployed Safe. The address of the Master Copy, Safe contract version and the contract (`Safe.sol` or `SafeL2.sol`) of the deployed Safe will depend on the initialization of the `safeFactory` instance.
+Deploys a new Safe and returns an instance of the Protocol Kit connected to the deployed Safe. The address of the singleton, Safe contract version and the contract (`Safe.sol` or `SafeL2.sol`) of the deployed Safe will depend on the initialization of the `safeFactory` instance.
```typescript
const safeAccountConfig: SafeAccountConfig = {
@@ -89,7 +89,7 @@ const safeAccountConfig: SafeAccountConfig = {
paymentReceiver // Optional
}
-const safeSdk = await safeFactory.deploySafe({ safeAccountConfig })
+const protocolKit = await safeFactory.deploySafe({ safeAccountConfig })
```
This method can optionally receive the `saltNonce` parameter.
@@ -108,7 +108,7 @@ const safeAccountConfig: SafeAccountConfig = {
const saltNonce = ''
-const safeSdk = await safeFactory.deploySafe({ safeAccountConfig, saltNonce })
+const protocolKit = await safeFactory.deploySafe({ safeAccountConfig, saltNonce })
```
Optionally, some properties can be passed as execution options:
@@ -136,7 +136,7 @@ const options: EthersTransactionOptions = {
```
```typescript
-const safeSdk = await safeFactory.deploySafe({ safeAccountConfig, safeDeploymentConfig, options })
+const protocolKit = await safeFactory.deploySafe({ safeAccountConfig, safeDeploymentConfig, options })
```
It can also take an optional callback which receives the `txHash` of the Safe deployment transaction prior to returning a new instance of the Protocol Kit:
@@ -146,7 +146,7 @@ const callback = (txHash: string): void => {
console.log({ txHash })
}
-const safeSdk = await safeFactory.deploySafe({ safeAccountConfig, callback })
+const protocolKit = await safeFactory.deploySafe({ safeAccountConfig, callback })
```
## Safe reference
@@ -160,10 +160,10 @@ Initialization of a deployed Safe using the `safeAddress` property:
```typescript
import Safe from '@safe-global/protocol-kit'
-const safeSdk = await Safe.create({ ethAdapter, safeAddress })
+const protocolKit = await Safe.create({ ethAdapter, safeAddress })
```
-Initialization of a not deployed Safe using the `predictedSafe` property. Because Safes are deployed in a deterministic way, passing a `predictedSafe` will allow to initialize the SDK with the Safe configuration and use it to some extent before it is deployed:
+Initialization of a not deployed Safe using the `predictedSafe` property. Because Safes are deployed in a deterministic way, passing a `predictedSafe` will allow to initialize the SDK with the Safe configuration and use it to some extent before it's deployed:
```typescript
import Safe, { PredictedSafeProps } from '@safe-global/protocol-kit'
@@ -173,22 +173,22 @@ const predictedSafe: PredictedSafeProps = {
safeDeploymentConfig
}
-const safeSdk = await Safe.create({ ethAdapter, predictedSafe })
+const protocolKit = await Safe.create({ ethAdapter, predictedSafe })
```
-- The `isL1SafeMasterCopy` flag
+- The `isL1SafeSingleton` flag
- There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
+ Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
- By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract.
+ By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract.
```typescript
- const safeSdk = await Safe.create({ ethAdapter, safeAddress, isL1SafeMasterCopy: true })
+ const protocolKit = await Safe.create({ ethAdapter, safeAddress, isL1SafeSingleton: true })
```
- The `contractNetworks` property
- If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
+ If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
```typescript
import { ContractNetworksConfig } from '@safe-global/protocol-kit'
@@ -196,7 +196,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe })
const chainId = await ethAdapter.getChainId()
const contractNetworks: ContractNetworksConfig = {
[chainId]: {
- safeMasterCopyAddress: '',
+ safeSingletonAddress: '',
safeProxyFactoryAddress: '',
multiSendAddress: '',
multiSendCallOnlyAddress: '',
@@ -204,7 +204,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe })
signMessageLibAddress: '',
createCallAddress: '',
simulateTxAccessorAddress: '',
- safeMasterCopyAbi: '', // Optional. Only needed with web3.js
+ safeSingletonAbi: '', // Optional. Only needed with web3.js
safeProxyFactoryAbi: '', // Optional. Only needed with web3.js
multiSendAbi: '', // Optional. Only needed with web3.js
multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js
@@ -215,7 +215,7 @@ const safeSdk = await Safe.create({ ethAdapter, predictedSafe })
}
}
- const safeSdk = await Safe.create({ ethAdapter, safeAddress, contractNetworks })
+ const protocolKit = await Safe.create({ ethAdapter, safeAddress, contractNetworks })
```
### `connect`
@@ -225,7 +225,8 @@ Returns a new instance of the Protocol Kit connected to a new Safe or a new Sign
Connection of a deployed Safe using the `safeAddress` property:
```typescript
-const safeSdk = await safeSdk.connect({ ethAdapter, safeAddress })
+let protocolKit = await Safe.create({ ethAdapter, safeAddress })
+protocolKit = await protocolKit.connect({ ethAdapter: anotherEthAdapter, safeAddress: anotherSafeAddress })
```
Connection of a not deployed Safe using the `predictedSafe` property. Because Safes are deployed in a deterministic way, passing a `predictedSafe` will allow to connect a Safe to the SDK with the Safe configuration:
@@ -238,22 +239,24 @@ const predictedSafe: PredictedSafeProps = {
safeDeploymentConfig
}
-const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe })
+let protocolKit = await Safe.create({ ethAdapter, safeAddress })
+...
+protocolKit = await protocolKit.connect({ predictedSafe })
```
-- The `isL1SafeMasterCopy` flag
+- The `isL1SafeSingleton` flag
- There are two versions of the Safe contracts: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that does not trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
+ Two versions of the Safe contracts are available: [Safe.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/Safe.sol) that doesn't trigger events in order to save gas and [SafeL2.sol](https://github.com/safe-global/safe-contracts/blob/v1.4.1/contracts/SafeL2.sol) that does, which is more appropriate for L2 networks.
- By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeMasterCopy` flag to force the use of the `Safe.sol` contract.
+ By default `Safe.sol` will be only used on Ethereum Mainnet. For the rest of the networks where the Safe contracts are already deployed, the `SafeL2.sol` contract will be used unless you add the `isL1SafeSingleton` flag to force the use of the `Safe.sol` contract.
```typescript
- const safeSdk = await Safe.connect({ ethAdapter, safeAddress, isL1SafeMasterCopy: true })
+ protocolKit = await protocolKit.connect({ ethAdapter, safeAddress, isL1SafeSingleton: true })
```
- The `contractNetworks` property
- If the Safe contracts are not deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
+ If the Safe contracts aren't deployed to your current network, the `contractNetworks` property will be required to point to the addresses of the Safe contracts previously deployed by you.
```typescript
import { ContractNetworksConfig } from '@safe-global/protocol-kit'
@@ -261,7 +264,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe })
const chainId = await ethAdapter.getChainId()
const contractNetworks: ContractNetworksConfig = {
[chainId]: {
- safeMasterCopyAddress: '',
+ safeSingletonAddress: '',
safeProxyFactoryAddress: '',
multiSendAddress: '',
multiSendCallOnlyAddress: '',
@@ -269,7 +272,7 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe })
signMessageLibAddress: '',
createCallAddress: '',
simulateTxAccessorAddress: '',
- safeMasterCopyAbi: '', // Optional. Only needed with web3.js
+ safeSingletonAbi: '', // Optional. Only needed with web3.js
safeProxyFactoryAbi: '', // Optional. Only needed with web3.js
multiSendAbi: '', // Optional. Only needed with web3.js
multiSendCallOnlyAbi: '', // Optional. Only needed with web3.js
@@ -279,7 +282,9 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe })
simulateTxAccessorAbi: '' // Optional. Only needed with web3.js
}
}
- const safeSdk = await Safe.connect({ ethAdapter, safeAddress, contractNetworks })
+ let protocolKit = await Safe.create({ ethAdapter, safeAddress })
+ ...
+ protocolKit = await protocolKit.connect({ contractNetworks })
```
### `getAddress`
@@ -287,15 +292,15 @@ const safeSdk = await safeSdk.connect({ ethAdapter, predictedSafe })
Returns the address of the current SafeProxy contract.
```typescript
-const safeAddress = await safeSdk.getAddress()
+const safeAddress = await protocolKit.getAddress()
```
### `getContractVersion`
-Returns the Safe Master Copy contract version.
+Returns the Safe singleton contract version.
```typescript
-const contractVersion = await safeSdk.getContractVersion()
+const contractVersion = await protocolKit.getContractVersion()
```
### `getOwners`
@@ -303,7 +308,7 @@ const contractVersion = await safeSdk.getContractVersion()
Returns the list of Safe owner accounts.
```typescript
-const ownerAddresses = await safeSdk.getOwners()
+const ownerAddresses = await protocolKit.getOwners()
```
### `getNonce`
@@ -311,7 +316,7 @@ const ownerAddresses = await safeSdk.getOwners()
Returns the Safe nonce.
```typescript
-const nonce = await safeSdk.getNonce()
+const nonce = await protocolKit.getNonce()
```
### `getThreshold`
@@ -319,15 +324,15 @@ const nonce = await safeSdk.getNonce()
Returns the Safe threshold.
```typescript
-const threshold = await safeSdk.getThreshold()
+const threshold = await protocolKit.getThreshold()
```
### `getChainId`
-Returns the chainId of the connected network.
+Returns the chain ID of the connected network.
```typescript
-const chainId = await safeSdk.getChainId()
+const chainId = await protocolKit.getChainId()
```
### `getBalance`
@@ -335,7 +340,7 @@ const chainId = await safeSdk.getChainId()
Returns the ETH balance of the Safe.
```typescript
-const balance = await safeSdk.getBalance()
+const balance = await protocolKit.getBalance()
```
### `getGuard`
@@ -343,7 +348,7 @@ const balance = await safeSdk.getBalance()
Returns the enabled Safe Guard or 0x address if no guards are enabled.
```typescript
-const guardAddress = await safeSdk.getGuard()
+const guardAddress = await protocolKit.getGuard()
```
### `getModules`
@@ -351,7 +356,7 @@ const guardAddress = await safeSdk.getGuard()
Returns the list of addresses of all the enabled Safe Modules.
```typescript
-const moduleAddresses = await safeSdk.getModules()
+const moduleAddresses = await protocolKit.getModules()
```
### `isModuleEnabled`
@@ -359,7 +364,7 @@ const moduleAddresses = await safeSdk.getModules()
Checks if a specific Safe Module is enabled for the current Safe.
```typescript
-const isEnabled = await safeSdk.isModuleEnabled(moduleAddress)
+const isEnabled = await protocolKit.isModuleEnabled(moduleAddress)
```
### `isOwner`
@@ -367,99 +372,77 @@ const isEnabled = await safeSdk.isModuleEnabled(moduleAddress)
Checks if a specific address is an owner of the current Safe.
```typescript
-const isOwner = await safeSdk.isOwner(address)
+const isOwner = await protocolKit.isOwner(address)
```
### `createTransaction`
Returns a Safe transaction ready to be signed by the owners and executed. The Protocol Kit supports the creation of single Safe transactions but also MultiSend transactions.
-- **Single transactions**
+This method takes an array of `MetaTransactionData` objects that represent the individual transactions we want to include in our MultiSend transaction.
- This method can take an object of type `SafeTransactionDataPartial` that represents the transaction we want to execute (once the signatures are collected). It accepts some optional properties as follows.
+When the array contains only one transaction, it's not wrapped in the MultiSend.
- ```typescript
- import { SafeTransactionDataPartial } from '@safe-global/safe-core-sdk-types'
-
- const safeTransactionData: SafeTransactionDataPartial = {
+```typescript
+const transactions: MetaTransactionData[] = [
+ {
+ to,
+ data,
+ value,
+ operation // Optional
+ },
+ {
to,
data,
value,
- operation, // Optional
- safeTxGas, // Optional
- baseGas, // Optional
- gasPrice, // Optional
- gasToken, // Optional
- refundReceiver, // Optional
- nonce // Optional
+ operation // Optional
}
- const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
- ```
-
-- **MultiSend transactions**
-
- This method can take an array of `MetaTransactionData` objects that represent the multiple transactions we want to include in our MultiSend transaction. If we want to specify some of the optional properties in our MultiSend transaction, we can pass a second argument to the `createTransaction` method with the `SafeTransactionOptionalProps` object.
-
- ```typescript
- const safeTransactionData: MetaTransactionData[] = [
- {
- to,
- data,
- value,
- operation // Optional
- },
- {
- to,
- data,
- value,
- operation // Optional
- }
- // ...
- ]
- const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
- ```
+ // ...
+]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+```
- This method can also receive the `options` parameter to set the optional properties in the MultiSend transaction:
+This method can also receive the `options` parameter to set the optional properties in the MultiSend transaction:
- ```typescript
- const safeTransactionData: MetaTransactionData[] = [
- {
- to,
- data,
- value,
- operation // Optional
- },
- {
- to,
- data,
- value,
- operation // Optional
- }
- // ...
- ]
- const options: SafeTransactionOptionalProps = {
- safeTxGas, // Optional
- baseGas, // Optional
- gasPrice, // Optional
- gasToken, // Optional
- refundReceiver, // Optional
- nonce // Optional
+```typescript
+const transactions: MetaTransactionData[] = [
+ {
+ to,
+ data,
+ value,
+ operation // Optional
+ },
+ {
+ to,
+ data,
+ value,
+ operation // Optional
}
- const safeTransaction = await safeSdk.createTransaction({ safeTransactionData, options })
- ```
+ // ...
+]
+const options: SafeTransactionOptionalProps = {
+ safeTxGas, // Optional
+ baseGas, // Optional
+ gasPrice, // Optional
+ gasToken, // Optional
+ refundReceiver, // Optional
+ nonce // Optional
+}
+const safeTransaction = await protocolKit.createTransaction({ transactions, options })
+```
- In addition, the optional `callsOnly` parameter, which is `false` by default, allows to force the use of the `MultiSendCallOnly` instead of the `MultiSend` contract when sending a batch transaction:
+In addition, the optional `callsOnly` parameter, which is `false` by default, allows to force the use of the `MultiSendCallOnly` instead of the `MultiSend` contract when sending a batch transaction:
- ```typescript
- const callsOnly = true
- const safeTransaction = await safeSdk.createTransaction({
- safeTransactionData,
- options,
- callsOnly
- })
- ```
+```typescript
+const callsOnly = true
+const safeTransaction = await protocolKit.createTransaction({
+ transactions,
+ options,
+ callsOnly
+})
+```
-If the optional properties are not manually set, the Safe transaction returned will have the default value for each one:
+If the optional properties aren't manually set, the Safe transaction returned will have the default value for each one:
- `operation`: `OperationType.Call` (0) is the default value.
- `safeTxGas`: The right gas estimation is the default value.
@@ -469,16 +452,25 @@ If the optional properties are not manually set, the Safe transaction returned w
- `refundReceiver`: 0x address is the default value.
- `nonce`: The current Safe nonce is the default value.
+### `createMessage`
+
+Returns a SafeMessage ready to be signed by the owners.
+
+```typescript
+const rayMessage: string | EIP712TypedData = "I am the owner of this Safe"
+const message = protocolKit.createMessage(rawMessage)
+```
+
### `createRejectionTransaction`
Returns a Safe transaction ready to be signed by the owners that invalidates the pending Safe transaction/s with a specific nonce.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const rejectionTransaction = await safeSdk.createRejectionTransaction(safeTransaction.data.nonce)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const rejectionTransaction = await protocolKit.createRejectionTransaction(safeTransaction.data.nonce)
```
### `copyTransaction`
@@ -486,7 +478,7 @@ const rejectionTransaction = await safeSdk.createRejectionTransaction(safeTransa
Copies a Safe transaction.
```typescript
-const safeTransaction1 = await safeSdk.createTransaction({ safeTransactionData })
+const safeTransaction1 = await protocolKit.createTransaction({ transactions })
const safeTransaction2 = await copyTransaction(safeTransaction1)
```
@@ -495,24 +487,24 @@ const safeTransaction2 = await copyTransaction(safeTransaction1)
Returns the transaction hash of a Safe transaction.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const txHash = await safeSdk.getTransactionHash(safeTransaction)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const txHash = await protocolKit.getTransactionHash(safeTransaction)
```
-### `signTransactionHash`
+### `signHash`
Signs a hash using the current owner account.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const txHash = await safeSdk.getTransactionHash(safeTransaction)
-const signature = await safeSdk.signTransactionHash(txHash)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const txHash = await protocolKit.getTransactionHash(safeTransaction)
+const signature = await protocolKit.signHash(txHash)
```
### `signTypedData`
@@ -520,33 +512,69 @@ const signature = await safeSdk.signTransactionHash(txHash)
Signs a transaction according to the EIP-712 using the current signer account.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const signature = await safeSdk.signTypedData(safeTransaction)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const signature = await protocolKit.signTypedData(safeTransaction)
```
### `signTransaction`
-Returns a new `SafeTransaction` object that includes the signature of the current owner. `eth_sign` will be used by default to generate the signature.
+Returns a new `SafeTransaction` object that includes the signature of the current owner.
+
+You can use multiple signing methods, such as:
+
+- ETH_SIGN (`eth_sign`): Regular hash signature
+- ETH_SIGN_TYPED_DATA_V4 (`eth_signTypedData_v4`): Typed data signature v4, The default method if no signing method is passed
+- ETH_SIGN_TYPED_DATA_V3 `eth_signTypedData_v3`: Typed data signature v3
+- ETH_SIGN_TYPED_DATA `eth_signTypedData`: Typed data signature
+- SAFE_SIGNATURE: Signing with another Safe contract as signer
+
+The third parameter (optional) is the preImageSafeAddress. If the preimage is required, this is the address of the Safe that will be used to calculate the preimage. It's mandatory parameter for 1.3.0 and 1.4.1 contract versions. This is because the safe uses the old EIP-1271 interface which uses `bytes` instead of `bytes32` for the message we need to use the pre-image of the message to calculate the message hash. This parameter is used in conjunction with the SAFE_SIGNATURE signing method.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction)
```
Optionally, an additional parameter can be passed to specify a different way of signing:
```typescript
-const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction, 'eth_signTypedData')
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction, SigningMethod.ETH_SIGN_TYPED_DATA_V4) // Default option
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction, SigningMethod.ETH_SIGN)
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction, SigningMethod.SAFE_SIGNATURE, parentSafeAddress).
```
+### `signMessage`
+
+Returns a new `SafeMessage` object that includes the signature of the current owner.
+
+You can use multiple signing methods, such as:
+
+- ETH_SIGN (`eth_sign`): Regular hash signature
+- ETH_SIGN_TYPED_DATA_V4 (`eth_signTypedData_v4`): Typed data signature v4, The default method if no signing method is passed
+- ETH_SIGN_TYPED_DATA_V3 `eth_signTypedData_v3`: Typed data signature v3
+- ETH_SIGN_TYPED_DATA `eth_signTypedData`: Typed data signature
+- SAFE_SIGNATURE: Signing with another Safe contract as signer
+
+The third parameter (optional) is the preImageSafeAddress. If the preimage is required, this is the address of the Safe that will be used to calculate the preimage. It's mandatory parameter for 1.3.0 and 1.4.1 contract versions. This is because the safe uses the old EIP-1271 interface which uses `bytes` instead of `bytes32` for the message we need to use the pre-image of the message to calculate the message hash. This parameter is used in conjunction with the SAFE_SIGNATURE signing method.
+
+```typescript
+const rawMessage: string | EIP712TypedData = "I am the owner of this Safe"
+const message = protocolKit.createMessage(rawMessage)
+const signedMessage = await protocolKit.signMessage(message)
+```
+
+Optionally, an additional parameter can be passed to specify a different way of signing:
+
```typescript
-const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction, 'eth_sign') // default option.
+const signedMessage = await protocolKit.signMessage(signedMessage, SigningMethod.ETH_SIGN_TYPED_DATA_V4) // Default option
+const signedMessage = await protocolKit.signMessage(signedMessage, SigningMethod.ETH_SIGN)
+const signedMessage = await protocolKit.signMessage(signedMessage, SigningMethod.SAFE_SIGNATURE, parentSafeAddress).
```
### `approveTransactionHash`
@@ -554,12 +582,12 @@ const signedSafeTransaction = await safeSdk.signTransaction(safeTransaction, 'et
Approves a hash on-chain using the current owner account.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const txHash = await safeSdk.getTransactionHash(safeTransaction)
-const txResponse = await safeSdk.approveTransactionHash(txHash)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const txHash = await protocolKit.getTransactionHash(safeTransaction)
+const txResponse = await protocolKit.approveTransactionHash(txHash)
await txResponse.transactionResponse?.wait()
```
@@ -588,7 +616,7 @@ const options: EthersTransactionOptions = {
```
```typescript
-const txResponse = await safeSdk.approveTransactionHash(txHash, options)
+const txResponse = await protocolKit.approveTransactionHash(txHash, options)
```
### `getOwnersWhoApprovedTx`
@@ -596,12 +624,12 @@ const txResponse = await safeSdk.approveTransactionHash(txHash, options)
Returns a list of owners who have approved a specific Safe transaction.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const txHash = await safeSdk.getTransactionHash(safeTransaction)
-const ownerAddresses = await safeSdk.getOwnersWhoApprovedTx(txHash)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const txHash = await protocolKit.getTransactionHash(safeTransaction)
+const ownerAddresses = await protocolKit.getOwnersWhoApprovedTx(txHash)
```
### `createEnableFallbackHandlerTx`
@@ -609,8 +637,8 @@ const ownerAddresses = await safeSdk.getOwnersWhoApprovedTx(txHash)
Returns the Safe transaction to enable the fallback handler.
```typescript
-const safeTransaction = await safeSdk.createEnableFallbackHandlerTx(fallbackHandlerAddress)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createEnableFallbackHandlerTx(fallbackHandlerAddress)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -625,7 +653,7 @@ const options: SafeTransactionOptionalProps = {
refundReceiver, // Optional
nonce // Optional
}
-const safeTransaction = await safeSdk.createEnableFallbackHandlerTx(fallbackHandlerAddress, options)
+const safeTransaction = await protocolKit.createEnableFallbackHandlerTx(fallbackHandlerAddress, options)
```
### `createDisableFallbackHandlerTx`
@@ -633,8 +661,8 @@ const safeTransaction = await safeSdk.createEnableFallbackHandlerTx(fallbackHand
Returns the Safe transaction to disable the fallback handler.
```typescript
-const safeTransaction = await safeSdk.createDisableFallbackHandlerTx()
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createDisableFallbackHandlerTx()
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -642,7 +670,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createDisableFallbackHandlerTx(options)
+const safeTransaction = await protocolKit.createDisableFallbackHandlerTx(options)
```
### `createEnableGuardTx`
@@ -650,8 +678,8 @@ const safeTransaction = await safeSdk.createDisableFallbackHandlerTx(options)
Returns the Safe transaction to enable a Safe Guard.
```typescript
-const safeTransaction = await safeSdk.createEnableGuardTx(guardAddress)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createEnableGuardTx(guardAddress)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -666,7 +694,7 @@ const options: SafeTransactionOptionalProps = {
refundReceiver, // Optional
nonce // Optional
}
-const safeTransaction = await safeSdk.createEnableGuardTx(guardAddress, options)
+const safeTransaction = await protocolKit.createEnableGuardTx(guardAddress, options)
```
### `createDisableGuardTx`
@@ -674,8 +702,8 @@ const safeTransaction = await safeSdk.createEnableGuardTx(guardAddress, options)
Returns the Safe transaction to disable a Safe Guard.
```typescript
-const safeTransaction = await safeSdk.createDisableGuardTx()
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createDisableGuardTx()
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -683,7 +711,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createDisableGuardTx(options)
+const safeTransaction = await protocolKit.createDisableGuardTx(options)
```
### `createEnableModuleTx`
@@ -691,8 +719,8 @@ const safeTransaction = await safeSdk.createDisableGuardTx(options)
Returns a Safe transaction ready to be signed that will enable a Safe Module.
```typescript
-const safeTransaction = await safeSdk.createEnableModuleTx(moduleAddress)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createEnableModuleTx(moduleAddress)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -700,7 +728,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createEnableModuleTx(moduleAddress, options)
+const safeTransaction = await protocolKit.createEnableModuleTx(moduleAddress, options)
```
### `createDisableModuleTx`
@@ -708,8 +736,8 @@ const safeTransaction = await safeSdk.createEnableModuleTx(moduleAddress, option
Returns a Safe transaction ready to be signed that will disable a Safe Module.
```typescript
-const safeTransaction = await safeSdk.createDisableModuleTx(moduleAddress)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createDisableModuleTx(moduleAddress)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -717,7 +745,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createDisableModuleTx(moduleAddress, options)
+const safeTransaction = await protocolKit.createDisableModuleTx(moduleAddress, options)
```
### `createAddOwnerTx`
@@ -727,10 +755,10 @@ Returns the Safe transaction to add an owner and optionally change the threshold
```typescript
const params: AddOwnerTxParams = {
ownerAddress,
- threshold // Optional. If `threshold` is not provided the current threshold will not change.
+ threshold // Optional. If `threshold` isn't provided the current threshold won't change.
}
-const safeTransaction = await safeSdk.createAddOwnerTx(params)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createAddOwnerTx(params)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -738,7 +766,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createAddOwnerTx(params, options)
+const safeTransaction = await protocolKit.createAddOwnerTx(params, options)
```
### `createRemoveOwnerTx`
@@ -748,10 +776,10 @@ Returns the Safe transaction to remove an owner and optionally change the thresh
```typescript
const params: RemoveOwnerTxParams = {
ownerAddress,
- newThreshold // Optional. If `newThreshold` is not provided, the current threshold will be decreased by one.
+ newThreshold // Optional. If `newThreshold` isn't provided, the current threshold will be decreased by one.
}
-const safeTransaction = await safeSdk.createRemoveOwnerTx(params)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createRemoveOwnerTx(params)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -759,7 +787,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createRemoveOwnerTx(params, options)
+const safeTransaction = await protocolKit.createRemoveOwnerTx(params, options)
```
### `createSwapOwnerTx`
@@ -771,8 +799,8 @@ const params: SwapOwnerTxParams = {
oldOwnerAddress,
newOwnerAddress
}
-const safeTransaction = await safeSdk.createSwapOwnerTx(params)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createSwapOwnerTx(params)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -780,7 +808,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createSwapOwnerTx(params, options)
+const safeTransaction = await protocolKit.createSwapOwnerTx(params, options)
```
### `createChangeThresholdTx`
@@ -788,8 +816,8 @@ const safeTransaction = await safeSdk.createSwapOwnerTx(params, options)
Returns the Safe transaction to change the threshold.
```typescript
-const safeTransaction = await safeSdk.createChangeThresholdTx(newThreshold)
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+const safeTransaction = await protocolKit.createChangeThresholdTx(newThreshold)
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -797,7 +825,7 @@ This method can optionally receive the `options` parameter:
```typescript
const options: SafeTransactionOptionalProps = { ... }
-const safeTransaction = await safeSdk.createChangeThresholdTx(newThreshold, options)
+const safeTransaction = await protocolKit.createChangeThresholdTx(newThreshold, options)
```
### `isValidTransaction`
@@ -805,11 +833,11 @@ const safeTransaction = await safeSdk.createChangeThresholdTx(newThreshold, opti
Checks if a Safe transaction can be executed successfully with no errors.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const isValidTx = await safeSdk.isValidTransaction(safeTransaction)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const isValidTx = await protocolKit.isValidTransaction(safeTransaction)
```
Optionally, some properties can be passed as execution options:
@@ -837,7 +865,7 @@ const options: EthersTransactionOptions = {
```
```typescript
-const isValidTx = await safeSdk.isValidTransaction(safeTransaction, options)
+const isValidTx = await protocolKit.isValidTransaction(safeTransaction, options)
```
### `executeTransaction`
@@ -845,11 +873,11 @@ const isValidTx = await safeSdk.isValidTransaction(safeTransaction, options)
Executes a Safe transaction.
```typescript
-const safeTransactionData: SafeTransactionDataPartial = {
+const transactions: MetaTransactionData[] = [{
// ...
-}
-const safeTransaction = await safeSdk.createTransaction({ safeTransactionData })
-const txResponse = await safeSdk.executeTransaction(safeTransaction)
+}]
+const safeTransaction = await protocolKit.createTransaction({ transactions })
+const txResponse = await protocolKit.executeTransaction(safeTransaction)
await txResponse.transactionResponse?.wait()
```
@@ -878,5 +906,43 @@ const options: EthersTransactionOptions = {
```
```typescript
-const txResponse = await safeSdk.executeTransaction(safeTransaction, options)
+const txResponse = await protocolKit.executeTransaction(safeTransaction, options)
+```
+
+
+### `getSafeMessageHash`
+
+Retrieve the Safe message hash of a string or EIP-712 typed data. It produces the identical hash as invoking the CompatibilityFallbackHandler's getMessageHash method.
+
+```typescript
+const rawMessage = ... // String or EIP-712 typed data
+const messageHash = hashSafeMessage(rawMessage)
+
+const safeMessageHash = await protocolKit.getSafeMessageHash(messageHash)
+```
+
+### `isValidSignature`
+
+Calls the CompatibilityFallbackHandler isValidSignature method (EIP-1271).
+
+It requires 2 parameters:
+
+- messageHash The hash of the message
+- signature The signature to be validated or '0x'. You can send as signature one of the following:
+ 1) An array of SafeSignature. In this case the signatures are concatenated for validation (buildSignatureBytes())
+ 2) The concatenated signatures as string
+ 3) '0x' if you want to validate an onchain message (Approved hash)
+
+The method returns if the signature is valid
+
+```typescript
+const rawMessage = ... // String or EIP-712 typed data
+const messageHash = hashSafeMessage(rawMessage)
+const safeMessageHash = await protocolKit.getSafeMessageHash(messageHash)
+
+const isValidSignature = await protocolKit.isValidSignature(safeMessageHash, signature)
+...
+const isValidSignature = await protocolKit.isValidSignature(safeMessageHash, [signature1, signature2])
+...
+const isValidSignature = await protocolKit.isValidSignature(safeMessageHash, '0x')
```
diff --git a/pages/sdk-protocol-kit/reference/migrating-to-v1.md b/pages/sdk-protocol-kit/reference/migrating-to-v1.md
new file mode 100644
index 00000000..76d61650
--- /dev/null
+++ b/pages/sdk-protocol-kit/reference/migrating-to-v1.md
@@ -0,0 +1,102 @@
+# Migrating to v1
+
+This guide references the major changes between `safe-core-sdk` and `protocol-kit` v1 to help those migrating an existing application.
+
+**Note:** Follow this guide before migrating to `protocol-kit` v2.
+
+You can remove `@safe-global/safe-core-sdk` from your `package.json` after completing this guide.
+
+## Adding the new dependency
+
+To add the Protocol Kit to your project, run the following:
+
+```bash
+yarn add @safe-global/protocol-kit@1.3.0
+```
+
+If you use the types library, you will need to update to v2.3.0:
+
+```bash
+yarn add @safe-global/safe-core-sdk-types@2.3.0
+```
+
+## `EthAdapter`
+
+### `EthersAdapter` (safe-ethers-lib)
+
+`EthersAdapter` isn't in a separate package anymore. Now, it's provided inside the `protocol-kit` package.
+
+**`protocol-kit v1` only supports `ethers v5`**
+
+```typescript
+// old
+import EthersAdapter from '@safe-global/safe-ethers-lib'
+
+// new
+import { EthersAdapter } from '@safe-global/protocol-kit'
+```
+
+After this change, you can remove `@safe-global/safe-ethers-lib` from your `package.json`.
+
+### `Web3Adapter` (safe-web3-lib)
+
+`Web3Adapter` isn't in a separate package anymore. Now, it's part of the `protocol-kit` package.
+
+**Note:** `protocol-kit` v1 only supports Web3.js v1.
+
+```typescript
+// old
+import Web3Adapter from '@safe-global/safe-web3-lib'
+
+// new
+import { Web3Adapter } from '@safe-global/protocol-kit'
+```
+
+After this change, you can remove `@safe-global/safe-web3-lib` from your `package.json`.
+
+### Type changes
+
+Type changes are affecting the web3 and ethers adapter libraries.
+
+`getSafeContract`, `getMultisendContract`, `getMultisendCallOnlyContract`, `getCompatibilityFallbackHandlerContract`, `getSafeProxyFactoryContract`, `getSignMessageLibContract` and `getCreateCallContract` don't need the `chainId` parameter anymore, they will use the chain set on the provider. Also, they return a `Promise` now.
+
+`estimateGas` now returns a `string` instead of a `number`.
+
+## `safeFactory.deploySafe()`
+
+`SafeDeploymentConfig` was simplified. If you were using a `saltNonce` you should set it like this:
+
+```typescript
+// old
+const safeAccountConfig: SafeAccountConfig = {
+ ...
+}
+const safeDeploymentConfig: SafeDeploymentConfig = { saltNonce }
+
+const safeSdk = await safeFactory.deploySafe({ safeAccountConfig, safeDeploymentConfig })
+
+// new
+const safeAccountConfig: SafeAccountConfig = {
+ ...
+}
+
+const saltNonce = ''
+
+const protocolKit = await safeFactory.deploySafe({ safeAccountConfig, saltNonce })
+```
+
+## `getAddress()`
+
+The `getAddress()` method now returns a `Promise`.
+
+```typescript
+// old
+const safeAddress = safeSdk.getAddress()
+
+// new
+const safeAddress = await protocolKit.getAddress()
+```
+
+## General type changes
+
+If you set `safeTxGas`, `baseGas`, or `gasPrice`, you must use the type `string` instead of `number`.
diff --git a/pages/sdk-protocol-kit/reference/migrating-to-v2.md b/pages/sdk-protocol-kit/reference/migrating-to-v2.md
new file mode 100644
index 00000000..c1807e0f
--- /dev/null
+++ b/pages/sdk-protocol-kit/reference/migrating-to-v2.md
@@ -0,0 +1,53 @@
+# Migrating to v2
+
+This guide references the major changes between v1 and v2 to help those migrating an existing app.
+
+**Note:** When upgrading to `protocol-kit` v2, it's necessary to upgrade to `safe-core-sdk-types` v3.
+
+## MasterCopy to Singleton
+
+To avoid confusion between terms used as synonyms, we aligned all our code to use the word `singleton`.
+
+- Rename `isL1SafeMasterCopy` to `isL1SafeSingleton`
+```js
+// old:
+SafeFactory.create({ ethAdapter, isL1SafeMasterCopy: true })
+
+// new:
+SafeFactory.create({ ethAdapter, isL1SafeSingleton: true })
+```
+
+## Ethers v6
+
+From `protocolKit v2`, `EthersAdapter` will only be compatible with ethers.js v6. If you still need to use v5, we recommend you keep `protocolKit v1`, but we encourage you to migrate to the latest version when you can.
+
+## Protocol Kit createTransaction() accepts only transaction array
+
+In `protocolKit v1`, the `createTransaction()` method accepted either an object or an array as a parameter. To avoid confusion, we changed it to accept only an array. Here is a migration example:
+
+```js
+// old:
+const safeTransactionData = {
+ to: '',
+ data: '',
+ value: '',
+ nonce: '',
+ safeTxGas: ''
+}
+const safeTransaction = protocolKit.createTransaction({ safeTransactionData })
+
+// new:
+const safeTransactionData = {
+ to: '',
+ data: '',
+ value: ''
+}
+const options = {
+ nonce: '',
+ safeTxGas: ''
+}
+const safeTransaction = protocolKit.createTransaction({
+ transactions: [safeTransactionData],
+ options
+})
+```
diff --git a/safe-core-sdk/relay-kit/README.md b/pages/sdk-relay-kit.md
similarity index 89%
rename from safe-core-sdk/relay-kit/README.md
rename to pages/sdk-relay-kit.md
index 4ce81bfb..42627da7 100644
--- a/safe-core-sdk/relay-kit/README.md
+++ b/pages/sdk-relay-kit.md
@@ -3,7 +3,7 @@
The Relay Kit lets users pay transaction fees (gas fees) using the native blockchain token or ERC-20 tokens. Gas fees can be payed with this kit using any ERC-20 token in your Safe, even if there is no native token balance.
The following guides show how to use the Relay Kit and integrate it into your project by using one of the packs:
-- [Gelato Pack](./gelato.md)
+- [Gelato Pack](./sdk-relay-kit/guides/gelato-relay.md)
## Resources
- [Relay Kit on GitHub](https://github.com/safe-global/safe-core-sdk/tree/main/packages/relay-kit)
diff --git a/pages/sdk-relay-kit/_meta.json b/pages/sdk-relay-kit/_meta.json
new file mode 100644
index 00000000..2fd436b3
--- /dev/null
+++ b/pages/sdk-relay-kit/_meta.json
@@ -0,0 +1,4 @@
+{
+ "guides": "Guides",
+ "reference": "Reference"
+}
\ No newline at end of file
diff --git a/safe-core-sdk/relay-kit/gelato.md b/pages/sdk-relay-kit/guides/gelato-relay.md
similarity index 87%
rename from safe-core-sdk/relay-kit/gelato.md
rename to pages/sdk-relay-kit/guides/gelato-relay.md
index c1723c2c..ae5928c7 100644
--- a/safe-core-sdk/relay-kit/gelato.md
+++ b/pages/sdk-relay-kit/guides/gelato-relay.md
@@ -16,7 +16,7 @@ yarn add ethers @safe-global/relay-kit @safe-global/protocol-kit @safe-global/sa
## Relay Kit options
-Currently, the Relay Kit is only compatible with the [Gelato relay](https://docs.gelato.network/developer-services/relay). There are 2 different ways to use the Gelato relay:
+Currently, the Relay Kit's only compatible with the [Gelato relay](https://docs.gelato.network/developer-services/relay). The Gelato relay can be used in two ways:
1. [Gelato 1Balance](https://docs.gelato.network/developer-services/relay/payment-and-fees/1balance)
2. [Gelato SyncFee](https://docs.gelato.network/developer-services/relay/quick-start/callwithsyncfee)
@@ -26,7 +26,7 @@ Currently, the Relay Kit is only compatible with the [Gelato relay](https://docs
For the 1Balance quickstart tutorial, you will use the Gelato relayer to pay for the gas fees on BNB Chain using the Polygon USDC you've deposited into your Gelato 1Balance account.
-For this tutorial you will need a Safe with a threshold of 1 deployed on BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../protocol-kit/).
+For this tutorial you will need a Safe with a threshold of 1 deployed on BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../../sdk-protocol-kit.md).
### Summary
@@ -60,13 +60,13 @@ Modify the variables to customize to match your desired transaction settings.
```typescript
// https://chainlist.org
const RPC_URL='https://endpoints.omniatech.io/v1/bsc/mainnet/public'
-const provider = new ethers.providers.JsonRpcProvider(RPC_URL)
+const provider = new ethers.JsonRpcProvider(RPC_URL)
const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider)
const safeAddress = '0x...' // Safe from which the transaction will be sent
// Any address can be used for destination. In this example, we use vitalik.eth
const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
-const withdrawAmount = ethers.utils.parseUnits('0.005', 'ether').toString()
+const withdrawAmount = ethers.parseUnits('0.005', 'ether').toString()
```
### Create the transaction object
@@ -91,30 +91,29 @@ const ethAdapter = new EthersAdapter({
signerOrProvider: signer
})
-const safeSDK = await Safe.create({
+const protocolKit = await Safe.create({
ethAdapter,
safeAddress
})
-const relayKit = new GelatoRelayPack(process.env.GELATO_RELAY_API_KEY!)
+const relayKit = new GelatoRelayPack({ apiKey: process.env.GELATO_RELAY_API_KEY!, protocolKit })
```
### Prepare the transaction
```typescript
const safeTransaction = await relayKit.createRelayedTransaction({
- safe: safeSDK,
transactions,
options
})
-const signedSafeTransaction = await safeSDK.signTransaction(safeTransaction)
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction)
```
### Send the transaction to the relay
```typescript
-const response = await relayKit.executeRelayTransaction(signedSafeTransaction, safeSDK, options)
+const response = await relayKit.executeRelayTransaction(signedSafeTransaction, options)
console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`)
```
@@ -125,7 +124,7 @@ console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/statu
For the SyncFee quickstart tutorial, you will use the Gelato relayer to pay for the gas fees on the BNB Chain using the BNB you hold in your Safe. No need to have funds on your signer.
-For this tutorial, you will need a Safe with a threshold of one deployed on the BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../protocol-kit/).
+For this tutorial, you will need a Safe with a threshold of one deployed on the BNB Chain. You can create one using [Safe{Wallet}](https://app.safe.global/) or the [Protocol Kit](../../sdk-protocol-kit.md).
### Import the packages
@@ -143,13 +142,13 @@ Modify the variables to customize to match your desired transaction settings.
```typescript
// https://chainlist.org
const RPC_URL='https://endpoints.omniatech.io/v1/bsc/mainnet/public'
-const provider = new ethers.providers.JsonRpcProvider(RPC_URL)
+const provider = new ethers.JsonRpcProvider(RPC_URL)
const signer = new ethers.Wallet(process.env.OWNER_1_PRIVATE_KEY!, provider)
const safeAddress = '0x...' // Safe from which the transaction will be sent
// Any address can be used for destination. In this example, we use vitalik.eth
const destinationAddress = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
-const withdrawAmount = ethers.utils.parseUnits('0.005', 'ether').toString()
+const withdrawAmount = ethers.parseUnits('0.005', 'ether').toString()
```
### Create the transaction object
@@ -171,26 +170,26 @@ const ethAdapter = new EthersAdapter({
signerOrProvider: signer
})
-const safeSDK = await Safe.create({
+const protocolKit = await Safe.create({
ethAdapter,
safeAddress
})
-const relayKit = new GelatoRelayPack()
+const relayKit = new GelatoRelayPack({ protocolKit })
```
### Prepare the transaction
```typescript
-const safeTransaction = await relayKit.createRelayedTransaction({ safe: safeSDK, transactions })
+const safeTransaction = await relayKit.createRelayedTransaction({ transactions })
-const signedSafeTransaction = await safeSDK.signTransaction(safeTransaction)
+const signedSafeTransaction = await protocolKit.signTransaction(safeTransaction)
```
### Send the transaction to the relay
```typescript
-const response = await relayKit.executeRelayTransaction(signedSafeTransaction, safeSDK)
+const response = await relayKit.executeRelayTransaction(signedSafeTransaction)
console.log(`Relay Transaction Task ID: https://relay.gelato.digital/tasks/status/${response.taskId}`)
```
diff --git a/pages/sdk-relay-kit/reference/migrating-to-v2.md b/pages/sdk-relay-kit/reference/migrating-to-v2.md
new file mode 100644
index 00000000..1ec283b6
--- /dev/null
+++ b/pages/sdk-relay-kit/reference/migrating-to-v2.md
@@ -0,0 +1,15 @@
+# Migrating to v2
+
+This guide references the major changes between v1 and v2 to help those migrating an existing app.
+
+## GelatoRelayPack
+
+- The `GelatoRelayPack` constructor now includes a mandatory `protocolKit` parameter. It's required for any new pack extending the `RelayKitBasePack`.
+
+```js
+constructor({ apiKey, protocolKit }: GelatoOptions)
+```
+
+- We removed the `protocolKit` parameter from the `createTransactionWithHandlePayment()`, `createTransactionWithTransfer()`, and `executeRelayTransaction()` methods in the `GelatoRelayPack` as now it's included in the constructor.
+
+- Removed the `export interface RelayPack` type as we now use an abstract class.
\ No newline at end of file
diff --git a/safe-smart-account/security/security-audits.md b/pages/smart-account-audits.md
similarity index 93%
rename from safe-smart-account/security/security-audits.md
rename to pages/smart-account-audits.md
index cd503c1f..1ff69d64 100644
--- a/safe-smart-account/security/security-audits.md
+++ b/pages/smart-account-audits.md
@@ -10,4 +10,4 @@ We take great care of ensuring the security of our smart contracts. Please find
* [Safe v0.0.1](https://github.com/safe-global/safe-contracts/blob/v1.1.1/docs/alexey_audit.md)
* [Allowance Module v0.1.0](https://github.com/safe-global/safe-modules/blob/47e2b486b0b31d97bab7648a3f76de9038c6e67b/allowances/AllowanceModuleAuditOct2020.md)
-Did you find a bug? Please [get in touch](mailto:bounty@safe.global) with us via our [bug bounty program](./bug-bounty-program.md).
+Did you find a bug? Please [get in touch](mailto:bounty@safe.global) with us via our [bug bounty program](./bug-bounty.md).
diff --git a/safe-smart-account/guards.md b/pages/smart-account-guards.mdx
similarity index 54%
rename from safe-smart-account/guards.md
rename to pages/smart-account-guards.mdx
index c8164951..095f2b5b 100644
--- a/safe-smart-account/guards.md
+++ b/pages/smart-account-guards.mdx
@@ -1,8 +1,11 @@
+import { Callout } from 'nextra/components'
+
# Safe Guards
-{% hint style="info" %}
-Safe Guards are introduced with [Safe contracts version 1.3.0](https://github.com/safe-global/safe-contracts/blob/v1.3.0/CHANGELOG.md).
-{% endhint %}
+
+ Safe Guards are introduced with [Safe contracts version
+ 1.3.0](https://GitHub.com/safe-global/safe-contracts/blob/v1.3.0/CHANGELOG.md).
+
Safe Guards are used when there are restrictions on top of the `n`-out-of-`m` scheme.
@@ -10,8 +13,10 @@ Safe Guards can make checks before and after a Safe transaction. The check befor
To read about different examples of Safe Guards, see the implementations from [Zodiac](https://github.com/gnosis/zodiac-guard-scope) and [Yearn](https://mirror.xyz/yearn-finance-engineering.eth/9uInM_sCrogPBs5qkFSNF6qe-32-0XLN5bty5wKLVqU).
-
+
-{% hint style="danger" %}
-**Important:** Since a Safe Guard has full power to block Safe transaction execution, a broken Guard can cause a denial of service for a Safe. Make sure to audit the Guard code and pay attention to recovery mechanisms.
-{% endhint %}
+
+ **Important:** Since a Safe Guard has full power to block Safe transaction
+ execution, a broken Guard can cause a denial of service for a Safe. Make sure
+ to audit the Guard code and pay attention to recovery mechanisms.
+
diff --git a/pages/smart-account-modules.mdx b/pages/smart-account-modules.mdx
new file mode 100644
index 00000000..24aa76ca
--- /dev/null
+++ b/pages/smart-account-modules.mdx
@@ -0,0 +1,29 @@
+import { Callout } from 'nextra/components'
+
+import YouTube from '../components/YouTube'
+
+# Safe Modules
+
+Safe Modules add custom features to Safe contracts. They're smart contracts that add functionality to Safe while separating module logic from Safe's core contracts. A basic Safe doesn't require any modules. Adding and removing a module requires confirmation from the configured threshold number of owners. Events are emitted whenever a module is added or removed and a module transaction succeeds or fails.
+
+Safe Modules can include daily spending allowances, amounts that can be spent without the approval of other owners, recurring transactions modules, and standing orders performed on a recurring date. For example, paying your rent or social recovery modules may allow you to recover a Safe if you lose access to owner accounts.
+
+
+
+## How to create a Safe Module
+
+A great way to understand how Safe Modules work is by creating one. An excellent place to start is [Safe Modding 101: Create your own Safe Module](https://www.youTube.com/watch?v=nmDYc9PlAic).
+
+
+
+## Examples
+
+1. [Safe Modules](https://github.com/safe-global/safe-modules)
+2. [Zodiac-compliant modules](https://zodiac.wiki/index.php/Introduction:_Zodiac_Standard#Modules)
+3. [Pimlico](https://docs.pimlico.io/permissionless/how-to/accounts/use-safe-account)
+
+
+ Safe Modules can be a security risk since they can execute arbitrary
+ transactions. Only add trusted and audited modules to a Safe. A malicious
+ module can take over a Safe.
+
diff --git a/safe-smart-account/README.md b/pages/smart-account-overview.md
similarity index 64%
rename from safe-smart-account/README.md
rename to pages/smart-account-overview.md
index c1002762..598c468d 100644
--- a/safe-smart-account/README.md
+++ b/pages/smart-account-overview.md
@@ -19,12 +19,12 @@ Here are some core components of a Safe Smart Account that you will learn about:
## Safe Modules
-[Safe Modules](modules.md) are smart contracts that extend Safe's functionality with added custom features while the module logic remains separate from Safe's core contracts.
+[Safe Modules](smart-account-modules.mdx) are smart contracts that extend Safe's functionality with added custom features while the module logic remains separate from Safe's core contracts.
## Safe Guards
-[Safe Guards](guards.md) make checks before and after a Safe transaction.
+[Safe Guards](smart-account-guards.mdx) make checks before and after a Safe transaction.
## Signatures
-Safe contracts support alternative [signature schemes](signatures/README.md) such as [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) and [EIP-712](https://eips.ethereum.org/EIPS/eip-712) and relaying by making the confirmation/verification logic independent of `msg.sender`.
+Safe contracts support alternative signature schemes such as [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) and [EIP-712](https://eips.ethereum.org/EIPS/eip-712) and relaying by making the confirmation/verification logic independent of `msg.sender`. Read more about the [signature schemes](https://github.com/safe-global/safe-contracts/blob/main/docs/signatures.md) supported by Safe.
diff --git a/safe-smart-account/signatures/README.md b/pages/smart-account-signatures.md
similarity index 85%
rename from safe-smart-account/signatures/README.md
rename to pages/smart-account-signatures.md
index 6acd75dd..cfbf7378 100644
--- a/safe-smart-account/signatures/README.md
+++ b/pages/smart-account-signatures.md
@@ -32,7 +32,7 @@ To be able to use `eth_sign` we need to take the parameters `r`, `s` and `v` fro
`{32-bytes r}{32-bytes s}{1-byte v}`
-`r`, `s` and `v`are the required parts of the ECDSA signature to recover the signer. `v` will be substracted by `4` to calculate the signature.
+`r`, `s` and `v`are the required parts of the ECDSA signature to recover the signer. `v` will be subtracted by `4` to calculate the signature.
#### Contract signature (EIP-1271)
@@ -42,7 +42,7 @@ To be able to use `eth_sign` we need to take the parameters `r`, `s` and `v` fro
`{32-bytes signature verifier}{32-bytes data position}{1-byte signature type}`
-**Signature verifier** - Padded address of the contract that implements the EIP 1271 interface to verify the signature
+**Signature verifier** - Padded address of the contract that implements the EIP-1271 interface to verify the signature
**Data position** - Position of the start of the signature data (offset relative to the beginning of the signature data)
@@ -64,7 +64,7 @@ The method `signMessage` can be used to mark a message as signed on-chain.
`{32-bytes hash validator}{32-bytes ignored}{1-byte signature type}`
-**Hash validator** - Padded address of the account that pre-validated the hash that should be validated. The Safe keeps track of all hashes that have been pre validated. This is done with a **mapping address to mapping of bytes32 to boolean** where it is possible to set a hash as validated by a certain address (hash validator). To add an entry to this mapping use `approveHash`. Also if the validator is the sender of transaction that executed the Safe transaction it is **not** required to use `approveHash` to add an entry to the mapping. (This can be seen in the [Team Edition tests](https://github.com/gnosis/safe-contracts/blob/v1.0.0/test/gnosisSafeTeamEdition.js))
+**Hash validator** - Padded address of the account that pre-validated the hash that should be validated. The Safe keeps track of all hashes that have been pre-validated. This is done with a **mapping address to mapping of bytes32 to boolean** where it's possible to set a hash as validated by a certain address (hash validator). To add an entry to this mapping use `approveHash`. Also if the validator is the sender of transaction that executed the Safe transaction it's **not** required to use `approveHash` to add an entry to the mapping. (This can be seen in the [Team Edition tests](https://github.com/gnosis/safe-contracts/blob/v1.0.0/test/gnosisSafeTeamEdition.js))
**Signature type** - 1
@@ -90,4 +90,3 @@ The signatures bytes used for `execTransaction` would therefore be the following
"bde0b9f486b1960454e326375d0b1680243e031fd4fb3f070d9a3ef9871ccfd57d1a653cffb6321f889169f08e548684e005f2b0c3a6c06fba4c4a68f5e006241c" + // encoded ECDSA signature
"000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000deadbeef" // length of bytes + data of bytes
```
-
diff --git a/pages/smart-account-signatures/_meta.json b/pages/smart-account-signatures/_meta.json
new file mode 100644
index 00000000..6b87dcfb
--- /dev/null
+++ b/pages/smart-account-signatures/_meta.json
@@ -0,0 +1,3 @@
+{
+ "eip-1271": "EIP-1271"
+}
\ No newline at end of file
diff --git a/safe-smart-account/signatures/eip-1271.md b/pages/smart-account-signatures/eip-1271.md
similarity index 77%
rename from safe-smart-account/signatures/eip-1271.md
rename to pages/smart-account-signatures/eip-1271.md
index 50977e27..b228b2ad 100644
--- a/safe-smart-account/signatures/eip-1271.md
+++ b/pages/smart-account-signatures/eip-1271.md
@@ -1,4 +1,4 @@
-# EIP-1271 off-chain signatures
+# EIP-1271 Off-chain signatures
The Safe contracts and interface support off-chain [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) signatures. However, because Safe is a smart account, the flow is slightly different from simple EOA signatures.
@@ -6,27 +6,27 @@ This doc explains signing and verifying messages off-chain. All examples use [Wa
## Signing messages
-It is possible to sign [EIP-191](https://eips.ethereum.org/EIPS/eip-191) compliant messages as well as [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data messages.
+It's possible to sign [EIP-191](https://eips.ethereum.org/EIPS/eip-191) compliant messages as well as [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data messages.
### Restrictions
- Only Safe contracts of version `>=1.1.0` are supported.
-- Signing off-chain messages with smart contract wallets is not yet supported.
+- Signing off-chain messages with smart contract wallets isn't yet supported.
### Enabling off-chain signing
-Multiple dApps rely on on-chain signing.
+Multiple dapps rely on on-chain signing.
However, off-chain signing is the new default for Safe Apps that use the [safe-apps-sdk](https://www.npmjs.com/package/@safe-global/safe-apps-sdk) version `>=7.11`.
In order to enable off-chain signing in a Safe App, the `safe-apps-sdk` package needs to be updated.
### EIP-191 messages
-To sign a message we have to call the `signMessage` function and pass in the message as hex string.
+To sign a message we've to call the `signMessage` function and pass in the message as hex string.
The signing request will be blocked until the message is fully signed and then return the `signature` as a string.
As Safe{Wallet} is a multi signature wallet, this process can take some time because multiple signers may need to sign the message.
-#### Example: sign message
+#### Example: Sign message
```typescript
import { hashMessage, hexlify, toUtf8Bytes } from 'ethers/lib/utils'
@@ -41,12 +41,12 @@ After signing a message it will be available in the Safe's Message list (Transac
### EIP-712 typed data
-To sign typed data we have to call the `signTypedData` function and pass in the typed data object.
+To sign typed data we've to call the `signTypedData` function and pass in the typed data object.
The signing request will be blocked until the message is fully signed and then return the `signature` as a string.
As Safe{Wallet} is a multi signature wallet, this process can take some time because multiple signers may need to sign the message.
-### Example: sign typed data
+### Example: Sign typed data
```typescript
const getExampleData = () => {
@@ -88,9 +88,9 @@ After signing, the message will be available in the Safe's Message list (Transac
You can fetch the signature asynchronously instead of waiting for the RPC response via the [Safe Transaction Service](https://github.com/safe-global/safe-transaction-service).
-To do so we have to generate a hash of the `message` or `typedData` using ethers `hashMessage(message)` or `_TypedDataEncoder.hash(domain, types, message)` and then compute the `Safe message hash` by calling `getMessageHash(messageHash)` on the Safe contract.
+To do so we've to generate a hash of the `message` or `typedData` using ethers `hashMessage(message)` or `_TypedDataEncoder.hash(domain, types, message)` and then compute the `Safe message hash` by calling `getMessageHash(messageHash)` on the Safe contract.
-### Example: get Safe message hash
+### Example: Get Safe message hash
```typescript
const getSafeInterface = () => {
@@ -121,20 +121,22 @@ const getSafeMessageHash = async (
}
```
-Then we can query the state of the message from the network-specific transaction service endpoint for messages: `https://safe-transaction-.safe.global/api/v1/messages/`.
+Then we can query the state of the message from the network-specific Transaction Service endpoint for messages: `https://safe-transaction-.safe.global/api/v1/messages/`.
-An example message on Goerli can be found here: `https://safe-transaction-goerli.safe.global/api/v1/messages/0x7f4032fd13f27c5fce4694a1a6b79f65c68656da4eee4347a414f5bcec915b39/`.
+
-For other network endpoints, see [Available Services](../../safe-core-api/available-services.md).
+For other network endpoints, see [Available Services](../../safe-core-api/supported-networks.md).
-### Example: Loading message from transaction service
+### Example: Loading message from Transaction Service
```typescript
const fetchMessage = async (
safeMessageHash: string
): Promise => {
const safeMessage = await fetch(
- `https://safe-transaction-goerli.safe.global/api/v1/messages/${safeMessageHash}`,
+ `https://safe-transaction-sepolia.safe.global/api/v1/messages/${safeMessageHash}`,
{
headers: { 'Content-Type': 'application/json' }
}
@@ -181,9 +183,9 @@ The signature of the message will be returned in the `preparedSignature` field.
We verify the signature by calling the Safe contract's `isValidSignature(hash, signature)` function on-chain. This function returns the `MAGIC VALUE BYTES 0x20c13b0b` if the `signature` is correct for the `messageHash`.
-_Note: A common pitfall is to pass the `safeMessageHash` to the `isValidSignature` call which is not correct. It needs to be the hash of the original message._
+_Note: A common pitfall is to pass the `safeMessageHash` to the `isValidSignature` call which isn't correct. It needs to be the hash of the original message._
-### Example: verify signature
+### Example: Verify signature
```typescript
const MAGIC_VALUE_BYTES = '0x20c13b0b'
@@ -209,22 +211,22 @@ const isValidSignature = async (
}
```
-### Example dApps
+### Example dapps
-- [Small test dApp](https://github.com/5afe/eip-1271-dapp)
+- [Small test dapp](https://github.com/5afe/eip-1271-dapp)
## Troubleshooting
-### Off-chain signing is not being used
+### Off-chain signing isn't being used
If your signing requests fallback to on-chain signing this could be because of multiple reasons:
-- The Safe App is not using `safe-apps-sdk` version `>=7.11.0`.
+- The Safe App isn't using `safe-apps-sdk` version `>=7.11.0`.
- The Safe{Wallet} is set to always use on-chain signing. This can be toggled in the Settings of the Safe{Wallet} (Settings -> Safe Apps).
-- The connected Safe does not have a _fallback handler_ set. This can happen if Safes were not created through the official interface such as a CLI or third party interface.
-- The Safe version is not compatible - off-chain signing is only available for Safes with version `>1.0.0`
+- The connected Safe doesn't have a _fallback handler_ set. This can happen if Safes weren't created through the official interface such as a CLI or third party interface.
+- The Safe version isn't compatible - off-chain signing is only available for Safes with version `>1.0.0`
-### Confusion of messageHash and safeMessageHash
+### Confusion of `messageHash` and `safeMessageHash`
`message`, `messageHash` and `safeMessageHash` often get mixed up:
diff --git a/pages/smart-account-supported-networks.md b/pages/smart-account-supported-networks.md
new file mode 100644
index 00000000..87f7c168
--- /dev/null
+++ b/pages/smart-account-supported-networks.md
@@ -0,0 +1,5 @@
+# Supported Networks
+
+This section lists the addresses of all the Safe contracts deployed grouped by version and chain. The same list can be found on the [GitHub repository](https://github.com/safe-global/safe-deployments), from which these pages are automatically generated.
+
+The most recent version of the Safe contracts is `v1.4.1`, which adds compatibility with the ERC-4337. However, it's not supported yet in the [Safe{Wallet}](https://app.safe.global) interface and the Safe Transaction Service. For that reason, depending on your use case, it might be recommended to continue using `v1.3.0` until there is better support.
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/_meta.json b/pages/smart-account-supported-networks/_meta.json
new file mode 100644
index 00000000..3726dac9
--- /dev/null
+++ b/pages/smart-account-supported-networks/_meta.json
@@ -0,0 +1,7 @@
+{
+ "v1.4.1": "v1.4.1",
+ "v1.3.0": "v1.3.0",
+ "v1.2.0": "v1.2.0",
+ "v1.1.1": "v1.1.1",
+ "v1.0.0": "v1.0.0"
+}
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/v1.0.0.md b/pages/smart-account-supported-networks/v1.0.0.md
new file mode 100644
index 00000000..9d995749
--- /dev/null
+++ b/pages/smart-account-supported-networks/v1.0.0.md
@@ -0,0 +1,47 @@
+# v1.0.0
+
+This page lists the addresses of all the Safe contracts `v1.0.0` grouped by chain.
+
+## Networks
+
+### Ethereum Mainnet
+
+This network's chain ID is 1.
+
+- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://etherscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A)
+- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://etherscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C)
+
+
+### Rinkeby
+
+This network's chain ID is 4.
+
+- `gnosis_safe.sol`: 0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A
+- `proxy_factory.sol`: 0x12302fE9c02ff50939BaAaaf415fc226C078613C
+
+
+### Goerli
+
+This network's chain ID is 5.
+
+- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://goerli.etherscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A)
+- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://goerli.etherscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C)
+
+
+### LUKSO Mainnet
+
+This network's chain ID is 42.
+
+- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://explorer.execution.mainnet.lukso.network/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A)
+- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://explorer.execution.mainnet.lukso.network/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C)
+
+
+### Gnosis
+
+This network's chain ID is 100.
+
+- `gnosis_safe.sol`: [0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A](https://gnosisscan.io/address/0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A)
+- `proxy_factory.sol`: [0x12302fE9c02ff50939BaAaaf415fc226C078613C](https://gnosisscan.io/address/0x12302fE9c02ff50939BaAaaf415fc226C078613C)
+
+
+
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/v1.1.1.md b/pages/smart-account-supported-networks/v1.1.1.md
new file mode 100644
index 00000000..8b20c991
--- /dev/null
+++ b/pages/smart-account-supported-networks/v1.1.1.md
@@ -0,0 +1,103 @@
+# v1.1.1
+
+This page lists the addresses of all the Safe contracts `v1.1.1` grouped by chain.
+
+## Networks
+
+### Ethereum Mainnet
+
+This network's chain ID is 1.
+
+- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://etherscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0)
+- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://etherscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a)
+- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://etherscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44)
+- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://etherscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F)
+- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://etherscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD)
+- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://etherscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B)
+
+
+### Rinkeby
+
+This network's chain ID is 4.
+
+- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0
+- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a
+- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44
+- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
+- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD
+- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B
+
+
+### Goerli
+
+This network's chain ID is 5.
+
+- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://goerli.etherscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0)
+- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://goerli.etherscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a)
+- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://goerli.etherscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44)
+- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://goerli.etherscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F)
+- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://goerli.etherscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD)
+- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://goerli.etherscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B)
+
+
+### LUKSO Mainnet
+
+This network's chain ID is 42.
+
+- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://explorer.execution.mainnet.lukso.network/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0)
+- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://explorer.execution.mainnet.lukso.network/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a)
+- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://explorer.execution.mainnet.lukso.network/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44)
+- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://explorer.execution.mainnet.lukso.network/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F)
+- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://explorer.execution.mainnet.lukso.network/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD)
+- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://explorer.execution.mainnet.lukso.network/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B)
+
+
+### TomoChain
+
+This network's chain ID is 88.
+
+- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0
+- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a
+- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44
+- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
+- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD
+- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B
+
+
+### Gnosis
+
+This network's chain ID is 100.
+
+- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://gnosisscan.io/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0)
+- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://gnosisscan.io/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a)
+- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://gnosisscan.io/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44)
+- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://gnosisscan.io/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F)
+- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://gnosisscan.io/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD)
+- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://gnosisscan.io/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B)
+
+
+### Energy Web Chain
+
+This network's chain ID is 246.
+
+- `create_and_add_modules.sol`: [0xF61A721642B0c0C8b334bA3763BA1326F53798C0](https://explorer.energyweb.org/address/0xF61A721642B0c0C8b334bA3763BA1326F53798C0)
+- `create_call.sol`: [0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a](https://explorer.energyweb.org/address/0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a)
+- `default_callback_handler.sol`: [0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44](https://explorer.energyweb.org/address/0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44)
+- `gnosis_safe.sol`: [0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F](https://explorer.energyweb.org/address/0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F)
+- `multi_send.sol`: [0x8D29bE29923b68abfDD21e541b9374737B49cdAD](https://explorer.energyweb.org/address/0x8D29bE29923b68abfDD21e541b9374737B49cdAD)
+- `proxy_factory.sol`: [0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B](https://explorer.energyweb.org/address/0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B)
+
+
+### Energy Web Volta Testnet
+
+This network's chain ID is 73799.
+
+- `create_and_add_modules.sol`: 0xF61A721642B0c0C8b334bA3763BA1326F53798C0
+- `create_call.sol`: 0x8538fcbccba7f5303d2c679fa5d7a629a8c9bf4a
+- `default_callback_handler.sol`: 0xd5D82B6aDDc9027B22dCA772Aa68D5d74cdBdF44
+- `gnosis_safe.sol`: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
+- `multi_send.sol`: 0x8D29bE29923b68abfDD21e541b9374737B49cdAD
+- `proxy_factory.sol`: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B
+
+
+
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/v1.2.0.md b/pages/smart-account-supported-networks/v1.2.0.md
new file mode 100644
index 00000000..f9e49b6e
--- /dev/null
+++ b/pages/smart-account-supported-networks/v1.2.0.md
@@ -0,0 +1,63 @@
+# v1.2.0
+
+This page lists the addresses of all the Safe contracts `v1.2.0` grouped by chain.
+
+## Networks
+
+### Ethereum Mainnet
+
+This network's chain ID is 1.
+
+- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://etherscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185)
+
+
+### Rinkeby
+
+This network's chain ID is 4.
+
+- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185
+
+
+### Goerli
+
+This network's chain ID is 5.
+
+- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://goerli.etherscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185)
+
+
+### LUKSO Mainnet
+
+This network's chain ID is 42.
+
+- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://explorer.execution.mainnet.lukso.network/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185)
+
+
+### TomoChain
+
+This network's chain ID is 88.
+
+- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185
+
+
+### Gnosis
+
+This network's chain ID is 100.
+
+- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://gnosisscan.io/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185)
+
+
+### Energy Web Chain
+
+This network's chain ID is 246.
+
+- `gnosis_safe.sol`: [0x6851D6fDFAfD08c0295C392436245E5bc78B0185](https://explorer.energyweb.org/address/0x6851D6fDFAfD08c0295C392436245E5bc78B0185)
+
+
+### Energy Web Volta Testnet
+
+This network's chain ID is 73799.
+
+- `gnosis_safe.sol`: 0x6851D6fDFAfD08c0295C392436245E5bc78B0185
+
+
+
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/v1.3.0.md b/pages/smart-account-supported-networks/v1.3.0.md
new file mode 100644
index 00000000..96505517
--- /dev/null
+++ b/pages/smart-account-supported-networks/v1.3.0.md
@@ -0,0 +1,2553 @@
+# v1.3.0
+
+This page lists the addresses of all the Safe contracts `v1.3.0` grouped by chain.
+
+## Networks
+
+### Ethereum Mainnet
+
+This network's chain ID is 1.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://etherscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://etherscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://etherscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://etherscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://etherscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://etherscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://etherscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://etherscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://etherscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Ropsten
+
+This network's chain ID is 3.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Rinkeby
+
+This network's chain ID is 4.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Goerli
+
+This network's chain ID is 5.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://goerli.etherscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://goerli.etherscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://goerli.etherscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://goerli.etherscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://goerli.etherscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://goerli.etherscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://goerli.etherscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://goerli.etherscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://goerli.etherscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### OP Mainnet
+
+This network's chain ID is 10.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://optimistic.etherscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://optimistic.etherscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://optimistic.etherscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://optimistic.etherscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://optimistic.etherscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://optimistic.etherscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://optimistic.etherscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://optimistic.etherscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://optimistic.etherscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Metadium Mainnet
+
+This network's chain ID is 11.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Metadium Testnet
+
+This network's chain ID is 12.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### ThunderCore Testnet
+
+This network's chain ID is 18.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer-testnet.thundercore.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer-testnet.thundercore.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer-testnet.thundercore.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer-testnet.thundercore.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer-testnet.thundercore.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer-testnet.thundercore.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer-testnet.thundercore.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer-testnet.thundercore.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer-testnet.thundercore.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Cronos Mainnet
+
+This network's chain ID is 25.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cronos.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cronos.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cronos.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cronos.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cronos.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cronos.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cronos.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cronos.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cronos.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Boba Network Rinkeby Testnet
+
+This network's chain ID is 28.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Rootstock Mainnet
+
+This network's chain ID is 30.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.rsk.co/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.rsk.co/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.rsk.co/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.rsk.co/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.rsk.co/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.rsk.co/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.rsk.co/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.rsk.co/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.rsk.co/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Rootstock Testnet
+
+This network's chain ID is 31.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.testnet.rsk.co/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.testnet.rsk.co/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.testnet.rsk.co/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.testnet.rsk.co/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.testnet.rsk.co/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.testnet.rsk.co/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.testnet.rsk.co/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.testnet.rsk.co/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.testnet.rsk.co/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### U2U Solaris Mainnet
+
+This network's chain ID is 39.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://u2uscan.xyz/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://u2uscan.xyz/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://u2uscan.xyz/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://u2uscan.xyz/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://u2uscan.xyz/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://u2uscan.xyz/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://u2uscan.xyz/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://u2uscan.xyz/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://u2uscan.xyz/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Telos EVM Mainnet
+
+This network's chain ID is 40.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://teloscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://teloscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://teloscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://teloscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://teloscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://teloscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://teloscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://teloscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://teloscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Telos EVM Testnet
+
+This network's chain ID is 41.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.teloscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.teloscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.teloscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.teloscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.teloscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.teloscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.teloscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.teloscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.teloscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### LUKSO Mainnet
+
+This network's chain ID is 42.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.execution.mainnet.lukso.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.execution.mainnet.lukso.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.execution.mainnet.lukso.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.execution.mainnet.lukso.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.execution.mainnet.lukso.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.execution.mainnet.lukso.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.execution.mainnet.lukso.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.execution.mainnet.lukso.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.execution.mainnet.lukso.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Crab Network
+
+This network's chain ID is 44.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://crab.subscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://crab.subscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://crab.subscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://crab.subscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://crab.subscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://crab.subscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://crab.subscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://crab.subscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://crab.subscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Darwinia Network
+
+This network's chain ID is 46.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://darwinia.subscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://darwinia.subscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://darwinia.subscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://darwinia.subscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://darwinia.subscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://darwinia.subscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://darwinia.subscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://darwinia.subscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://darwinia.subscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### XDC Network
+
+This network's chain ID is 50.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://xdcscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://xdcscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://xdcscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://xdcscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://xdcscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://xdcscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://xdcscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://xdcscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://xdcscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### XDC Apothem Network
+
+This network's chain ID is 51.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://apothem.xinfinscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://apothem.xinfinscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://apothem.xinfinscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://apothem.xinfinscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://apothem.xinfinscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://apothem.xinfinscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://apothem.xinfinscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://apothem.xinfinscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://apothem.xinfinscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### BNB Smart Chain Mainnet
+
+This network's chain ID is 56.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bscscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bscscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bscscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bscscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bscscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bscscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bscscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bscscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bscscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Syscoin Mainnet
+
+This network's chain ID is 57.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.syscoin.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.syscoin.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.syscoin.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.syscoin.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.syscoin.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.syscoin.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.syscoin.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.syscoin.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.syscoin.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Ethereum Classic
+
+This network's chain ID is 61.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://etc.blockscout.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://etc.blockscout.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://etc.blockscout.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://etc.blockscout.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://etc.blockscout.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://etc.blockscout.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://etc.blockscout.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://etc.blockscout.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://etc.blockscout.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Mordor Testnet
+
+This network's chain ID is 63.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://etc-mordor.blockscout.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://etc-mordor.blockscout.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://etc-mordor.blockscout.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://etc-mordor.blockscout.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://etc-mordor.blockscout.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://etc-mordor.blockscout.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://etc-mordor.blockscout.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://etc-mordor.blockscout.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://etc-mordor.blockscout.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Optimism Kovan
+
+This network's chain ID is 69.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Conflux eSpace (Testnet)
+
+This network's chain ID is 71.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://evmtestnet.confluxscan.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://evmtestnet.confluxscan.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://evmtestnet.confluxscan.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://evmtestnet.confluxscan.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://evmtestnet.confluxscan.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://evmtestnet.confluxscan.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://evmtestnet.confluxscan.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://evmtestnet.confluxscan.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://evmtestnet.confluxscan.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Japan Open Chain Mainnet
+
+This network's chain ID is 81.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.japanopenchain.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.japanopenchain.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.japanopenchain.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.japanopenchain.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.japanopenchain.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.japanopenchain.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.japanopenchain.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.japanopenchain.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.japanopenchain.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Meter Mainnet
+
+This network's chain ID is 82.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scan.meter.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scan.meter.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scan.meter.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scan.meter.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scan.meter.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scan.meter.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scan.meter.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scan.meter.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scan.meter.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Meter Testnet
+
+This network's chain ID is 83.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scan-warringstakes.meter.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scan-warringstakes.meter.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scan-warringstakes.meter.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scan-warringstakes.meter.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scan-warringstakes.meter.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scan-warringstakes.meter.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scan-warringstakes.meter.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scan-warringstakes.meter.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scan-warringstakes.meter.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### BNB Smart Chain Testnet
+
+This network's chain ID is 97.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.bscscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.bscscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.bscscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.bscscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.bscscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.bscscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.bscscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.bscscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.bscscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Gnosis
+
+This network's chain ID is 100.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://gnosisscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://gnosisscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://gnosisscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://gnosisscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://gnosisscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://gnosisscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://gnosisscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://gnosisscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://gnosisscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Velas EVM Mainnet
+
+This network's chain ID is 106.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://evmexplorer.velas.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://evmexplorer.velas.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://evmexplorer.velas.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://evmexplorer.velas.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://evmexplorer.velas.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://evmexplorer.velas.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://evmexplorer.velas.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://evmexplorer.velas.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://evmexplorer.velas.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### ThunderCore Mainnet
+
+This network's chain ID is 108.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://viewblock.io/thundercore/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://viewblock.io/thundercore/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://viewblock.io/thundercore/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://viewblock.io/thundercore/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://viewblock.io/thundercore/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://viewblock.io/thundercore/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://viewblock.io/thundercore/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://viewblock.io/thundercore/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://viewblock.io/thundercore/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### EtherLite Chain
+
+This network's chain ID is 111.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Fuse Mainnet
+
+This network's chain ID is 122.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.fuse.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.fuse.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.fuse.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.fuse.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.fuse.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.fuse.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.fuse.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.fuse.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.fuse.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Fuse Sparknet
+
+This network's chain ID is 123.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Polygon Mainnet
+
+This network's chain ID is 137.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### ShimmerEVM
+
+This network's chain ID is 148.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.evm.shimmer.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.evm.shimmer.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.evm.shimmer.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.evm.shimmer.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.evm.shimmer.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.evm.shimmer.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.evm.shimmer.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.evm.shimmer.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.evm.shimmer.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Tenet Testnet
+
+This network's chain ID is 155.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://testnet.tenetscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://testnet.tenetscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://testnet.tenetscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://testnet.tenetscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://testnet.tenetscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://testnet.tenetscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://testnet.tenetscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://testnet.tenetscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://testnet.tenetscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Manta Pacific Mainnet
+
+This network's chain ID is 169.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://pacific-explorer.manta.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://pacific-explorer.manta.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://pacific-explorer.manta.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://pacific-explorer.manta.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://pacific-explorer.manta.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://pacific-explorer.manta.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://pacific-explorer.manta.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://pacific-explorer.manta.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://pacific-explorer.manta.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### opBNB Mainnet
+
+This network's chain ID is 204.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://mainnet.opbnbscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://mainnet.opbnbscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://mainnet.opbnbscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://mainnet.opbnbscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://mainnet.opbnbscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://mainnet.opbnbscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://mainnet.opbnbscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://mainnet.opbnbscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://mainnet.opbnbscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Energy Web Chain
+
+This network's chain ID is 246.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.energyweb.org/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.energyweb.org/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.energyweb.org/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.energyweb.org/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.energyweb.org/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.energyweb.org/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.energyweb.org/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.energyweb.org/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.energyweb.org/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Fantom Opera
+
+This network's chain ID is 250.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://ftmscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://ftmscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://ftmscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://ftmscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://ftmscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://ftmscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://ftmscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://ftmscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://ftmscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Kroma
+
+This network's chain ID is 255.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.kroma.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.kroma.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.kroma.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.kroma.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.kroma.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.kroma.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.kroma.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.kroma.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.kroma.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### zkSync Era Goerli Testnet (deprecated)
+
+This network's chain ID is 280.
+
+- `compatibility_fallback_handler.sol`: [0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A](https://goerli.explorer.zksync.io/address/0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A)
+- `create_call.sol`: [0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56](https://goerli.explorer.zksync.io/address/0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56)
+- `gnosis_safe.sol`: [0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910](https://goerli.explorer.zksync.io/address/0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910)
+- `gnosis_safe_l2.sol`: [0x1727c2c531cf966f902E5927b98490fDFb3b2b70](https://goerli.explorer.zksync.io/address/0x1727c2c531cf966f902E5927b98490fDFb3b2b70)
+- `multi_send.sol`: [0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912](https://goerli.explorer.zksync.io/address/0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912)
+- `multi_send_call_only.sol`: [0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F](https://goerli.explorer.zksync.io/address/0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F)
+- `proxy_factory.sol`: [0xDAec33641865E4651fB43181C6DB6f7232Ee91c2](https://goerli.explorer.zksync.io/address/0xDAec33641865E4651fB43181C6DB6f7232Ee91c2)
+- `sign_message_lib.sol`: [0x357147caf9C0cCa67DfA0CF5369318d8193c8407](https://goerli.explorer.zksync.io/address/0x357147caf9C0cCa67DfA0CF5369318d8193c8407)
+- `simulate_tx_accessor.sol`: [0x4191E2e12E8BC5002424CE0c51f9947b02675a44](https://goerli.explorer.zksync.io/address/0x4191E2e12E8BC5002424CE0c51f9947b02675a44)
+
+
+### Boba Network
+
+This network's chain ID is 288.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://bobascan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://bobascan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://bobascan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://bobascan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://bobascan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://bobascan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://bobascan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://bobascan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://bobascan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Orderly Mainnet
+
+This network's chain ID is 291.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.orderly.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.orderly.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.orderly.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.orderly.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.orderly.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.orderly.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.orderly.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.orderly.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### zkSync Sepolia Testnet
+
+This network's chain ID is 300.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://sepolia.explorer.zksync.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://sepolia.explorer.zksync.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://sepolia.explorer.zksync.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://sepolia.explorer.zksync.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://sepolia.explorer.zksync.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://sepolia.explorer.zksync.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://sepolia.explorer.zksync.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://sepolia.explorer.zksync.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://sepolia.explorer.zksync.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### KCC Mainnet
+
+This network's chain ID is 321.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.kcc.io/en/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.kcc.io/en/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.kcc.io/en/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.kcc.io/en/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.kcc.io/en/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.kcc.io/en/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.kcc.io/en/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.kcc.io/en/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.kcc.io/en/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### KCC Testnet
+
+This network's chain ID is 322.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan-testnet.kcc.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan-testnet.kcc.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan-testnet.kcc.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan-testnet.kcc.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan-testnet.kcc.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan-testnet.kcc.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan-testnet.kcc.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan-testnet.kcc.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan-testnet.kcc.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### zkSync Mainnet
+
+This network's chain ID is 324.
+
+- `compatibility_fallback_handler.sol`: [0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A](https://explorer.zksync.io/address/0x2f870a80647BbC554F3a0EBD093f11B4d2a7492A)
+- `create_call.sol`: [0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56](https://explorer.zksync.io/address/0xcB8e5E438c5c2b45FbE17B02Ca9aF91509a8ad56)
+- `gnosis_safe.sol`: [0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910](https://explorer.zksync.io/address/0xB00ce5CCcdEf57e539ddcEd01DF43a13855d9910)
+- `gnosis_safe_l2.sol`: [0x1727c2c531cf966f902E5927b98490fDFb3b2b70](https://explorer.zksync.io/address/0x1727c2c531cf966f902E5927b98490fDFb3b2b70)
+- `multi_send.sol`: [0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912](https://explorer.zksync.io/address/0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912)
+- `multi_send_call_only.sol`: [0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F](https://explorer.zksync.io/address/0xf220D3b4DFb23C4ade8C88E526C1353AbAcbC38F)
+- `proxy_factory.sol`: [0xDAec33641865E4651fB43181C6DB6f7232Ee91c2](https://explorer.zksync.io/address/0xDAec33641865E4651fB43181C6DB6f7232Ee91c2)
+- `sign_message_lib.sol`: [0x357147caf9C0cCa67DfA0CF5369318d8193c8407](https://explorer.zksync.io/address/0x357147caf9C0cCa67DfA0CF5369318d8193c8407)
+- `simulate_tx_accessor.sol`: [0x4191E2e12E8BC5002424CE0c51f9947b02675a44](https://explorer.zksync.io/address/0x4191E2e12E8BC5002424CE0c51f9947b02675a44)
+
+
+### Shiden
+
+This network's chain ID is 336.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://shiden.subscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://shiden.subscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://shiden.subscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://shiden.subscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://shiden.subscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://shiden.subscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://shiden.subscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://shiden.subscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://shiden.subscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Cronos Testnet
+
+This network's chain ID is 338.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cronos.org/testnet/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cronos.org/testnet/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cronos.org/testnet/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cronos.org/testnet/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cronos.org/testnet/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cronos.org/testnet/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cronos.org/testnet/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cronos.org/testnet/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cronos.org/testnet/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Optimism Goerli Testnet
+
+This network's chain ID is 420.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://optimism-goerli.blockscout.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://optimism-goerli.blockscout.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://optimism-goerli.blockscout.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://optimism-goerli.blockscout.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://optimism-goerli.blockscout.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://optimism-goerli.blockscout.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://optimism-goerli.blockscout.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://optimism-goerli.blockscout.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://optimism-goerli.blockscout.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### PGN (Public Goods Network)
+
+This network's chain ID is 424.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.publicgoods.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.publicgoods.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.publicgoods.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.publicgoods.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.publicgoods.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.publicgoods.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.publicgoods.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.publicgoods.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+
+
+### Rollux Mainnet
+
+This network's chain ID is 570.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.rollux.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.rollux.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.rollux.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.rollux.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.rollux.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.rollux.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.rollux.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.rollux.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.rollux.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Metis Stardust Testnet
+
+This network's chain ID is 588.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Astar
+
+This network's chain ID is 592.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://astar.subscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://astar.subscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://astar.subscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://astar.subscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://astar.subscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://astar.subscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://astar.subscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://astar.subscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://astar.subscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Acala Mandala Testnet TC9
+
+This network's chain ID is 595.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.mandala.aca-staging.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.mandala.aca-staging.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.mandala.aca-staging.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.mandala.aca-staging.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.mandala.aca-staging.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.mandala.aca-staging.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.mandala.aca-staging.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.mandala.aca-staging.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.mandala.aca-staging.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Metis Goerli Testnet
+
+This network's chain ID is 599.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://goerli.explorer.metisdevops.link/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://goerli.explorer.metisdevops.link/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://goerli.explorer.metisdevops.link/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://goerli.explorer.metisdevops.link/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://goerli.explorer.metisdevops.link/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://goerli.explorer.metisdevops.link/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://goerli.explorer.metisdevops.link/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://goerli.explorer.metisdevops.link/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://goerli.explorer.metisdevops.link/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Karura Network
+
+This network's chain ID is 686.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.karura.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.karura.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.karura.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.karura.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.karura.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.karura.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.karura.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.karura.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.karura.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Acala Network
+
+This network's chain ID is 787.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.acala.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.acala.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.acala.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.acala.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.acala.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.acala.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.acala.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.acala.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.acala.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Klaytn Testnet Baobab
+
+This network's chain ID is 1001.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scope.klaytn.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scope.klaytn.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scope.klaytn.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scope.klaytn.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scope.klaytn.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scope.klaytn.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scope.klaytn.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scope.klaytn.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scope.klaytn.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Eurus Mainnet
+
+This network's chain ID is 1008.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Conflux eSpace
+
+This network's chain ID is 1030.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://evm.confluxscan.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://evm.confluxscan.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://evm.confluxscan.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://evm.confluxscan.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://evm.confluxscan.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://evm.confluxscan.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://evm.confluxscan.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://evm.confluxscan.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://evm.confluxscan.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Metis Andromeda Mainnet
+
+This network's chain ID is 1088.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://andromeda-explorer.metis.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://andromeda-explorer.metis.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://andromeda-explorer.metis.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://andromeda-explorer.metis.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://andromeda-explorer.metis.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://andromeda-explorer.metis.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://andromeda-explorer.metis.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://andromeda-explorer.metis.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://andromeda-explorer.metis.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Polygon zkEVM
+
+This network's chain ID is 1101.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://zkevm.polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://zkevm.polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://zkevm.polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://zkevm.polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://zkevm.polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://zkevm.polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://zkevm.polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://zkevm.polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://zkevm.polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### WEMIX3.0 Mainnet
+
+This network's chain ID is 1111.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.wemix.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.wemix.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.wemix.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.wemix.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.wemix.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.wemix.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.wemix.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.wemix.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.wemix.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### WEMIX3.0 Testnet
+
+This network's chain ID is 1112.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://microscope.test.wemix.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://microscope.test.wemix.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://microscope.test.wemix.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://microscope.test.wemix.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://microscope.test.wemix.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://microscope.test.wemix.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://microscope.test.wemix.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://microscope.test.wemix.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://microscope.test.wemix.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Core Blockchain Testnet
+
+This network's chain ID is 1115.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.test.btcs.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.test.btcs.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.test.btcs.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.test.btcs.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.test.btcs.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.test.btcs.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.test.btcs.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.test.btcs.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.test.btcs.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Core Blockchain Mainnet
+
+This network's chain ID is 1116.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.coredao.org/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.coredao.org/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.coredao.org/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.coredao.org/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.coredao.org/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.coredao.org/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.coredao.org/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.coredao.org/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.coredao.org/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Ultron Testnet
+
+This network's chain ID is 1230.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.ultron-dev.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.ultron-dev.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.ultron-dev.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.ultron-dev.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.ultron-dev.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.ultron-dev.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.ultron-dev.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.ultron-dev.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.ultron-dev.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Ultron Mainnet
+
+This network's chain ID is 1231.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://ulxscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://ulxscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://ulxscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://ulxscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://ulxscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://ulxscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://ulxscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://ulxscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://ulxscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Moonbeam
+
+This network's chain ID is 1284.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonbeam.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonbeam.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonbeam.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonbeam.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonbeam.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonbeam.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonbeam.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonbeam.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonbeam.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Moonriver
+
+This network's chain ID is 1285.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonriver.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonriver.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonriver.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonriver.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonriver.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonriver.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonriver.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonriver.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonriver.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Moonbase Alpha
+
+This network's chain ID is 1287.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://moonbase.moonscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://moonbase.moonscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://moonbase.moonscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://moonbase.moonscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://moonbase.moonscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://moonbase.moonscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://moonbase.moonscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://moonbase.moonscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://moonbase.moonscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Bobabeam
+
+This network's chain ID is 1294.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Polygon zkEVM Testnet
+
+This network's chain ID is 1442.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.public.zkevm-test.net/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.public.zkevm-test.net/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.public.zkevm-test.net/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.public.zkevm-test.net/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.public.zkevm-test.net/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.public.zkevm-test.net/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.public.zkevm-test.net/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.public.zkevm-test.net/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.public.zkevm-test.net/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Tenet
+
+This network's chain ID is 1559.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://tenetscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://tenetscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://tenetscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://tenetscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://tenetscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://tenetscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://tenetscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://tenetscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://tenetscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Horizen Gobi Testnet
+
+This network's chain ID is 1663.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://gobi-explorer.horizen.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://gobi-explorer.horizen.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://gobi-explorer.horizen.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://gobi-explorer.horizen.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://gobi-explorer.horizen.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://gobi-explorer.horizen.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://gobi-explorer.horizen.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://gobi-explorer.horizen.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://gobi-explorer.horizen.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Rabbit Analog Testnet Chain
+
+This network's chain ID is 1807.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Lightlink Phoenix Mainnet
+
+This network's chain ID is 1890.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://phoenix.lightlink.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://phoenix.lightlink.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://phoenix.lightlink.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://phoenix.lightlink.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://phoenix.lightlink.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://phoenix.lightlink.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://phoenix.lightlink.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://phoenix.lightlink.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://phoenix.lightlink.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Lightlink Pegasus Testnet
+
+This network's chain ID is 1891.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://pegasus.lightlink.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://pegasus.lightlink.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://pegasus.lightlink.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://pegasus.lightlink.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://pegasus.lightlink.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://pegasus.lightlink.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://pegasus.lightlink.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://pegasus.lightlink.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://pegasus.lightlink.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Eurus Testnet
+
+This network's chain ID is 1984.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Milkomeda C1 Mainnet
+
+This network's chain ID is 2001.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Milkomeda A1 Mainnet
+
+This network's chain ID is 2002.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### CloudWalk Testnet
+
+This network's chain ID is 2008.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.testnet.cloudwalk.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.testnet.cloudwalk.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.testnet.cloudwalk.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.testnet.cloudwalk.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.testnet.cloudwalk.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.testnet.cloudwalk.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.testnet.cloudwalk.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.testnet.cloudwalk.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.testnet.cloudwalk.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### PublicMint Testnet
+
+This network's chain ID is 2019.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### PublicMint Mainnet
+
+This network's chain ID is 2020.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.publicmint.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.publicmint.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.publicmint.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.publicmint.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.publicmint.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.publicmint.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.publicmint.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.publicmint.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.publicmint.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Edgeware EdgeEVM Mainnet
+
+This network's chain ID is 2021.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://edgscan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://edgscan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://edgscan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://edgscan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://edgscan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://edgscan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://edgscan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://edgscan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://edgscan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Kava Testnet
+
+This network's chain ID is 2221.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](http://testnet.kavascan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](http://testnet.kavascan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](http://testnet.kavascan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](http://testnet.kavascan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](http://testnet.kavascan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](http://testnet.kavascan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](http://testnet.kavascan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](http://testnet.kavascan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](http://testnet.kavascan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Kava
+
+This network's chain ID is 2222.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://kavascan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://kavascan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://kavascan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://kavascan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://kavascan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://kavascan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://kavascan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://kavascan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://kavascan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Kroma Sepolia
+
+This network's chain ID is 2358.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockscout.sepolia.kroma.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockscout.sepolia.kroma.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockscout.sepolia.kroma.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockscout.sepolia.kroma.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockscout.sepolia.kroma.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockscout.sepolia.kroma.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockscout.sepolia.kroma.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockscout.sepolia.kroma.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockscout.sepolia.kroma.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Crossbell
+
+This network's chain ID is 3737.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.crossbell.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.crossbell.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.crossbell.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.crossbell.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.crossbell.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.crossbell.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.crossbell.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.crossbell.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.crossbell.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Fantom Testnet
+
+This network's chain ID is 4002.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.ftmscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.ftmscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.ftmscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.ftmscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.ftmscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.ftmscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.ftmscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.ftmscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.ftmscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Beam
+
+This network's chain ID is 4337.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://subnets.avax.network/beam/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://subnets.avax.network/beam/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://subnets.avax.network/beam/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://subnets.avax.network/beam/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://subnets.avax.network/beam/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://subnets.avax.network/beam/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://subnets.avax.network/beam/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://subnets.avax.network/beam/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://subnets.avax.network/beam/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Orderly Sepolia Testnet
+
+This network's chain ID is 4460.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorerl2new-orderly-l2-4460-sepolia-8tc3sd7dvy.t.conduit.xyz/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### IoTeX Network Mainnet
+
+This network's chain ID is 4689.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://iotexscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://iotexscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://iotexscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://iotexscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://iotexscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://iotexscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://iotexscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://iotexscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://iotexscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Venidium Testnet
+
+This network's chain ID is 4918.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Venidium Mainnet
+
+This network's chain ID is 4919.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Mantle
+
+This network's chain ID is 5000.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.mantle.xyz/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.mantle.xyz/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.mantle.xyz/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.mantle.xyz/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.mantle.xyz/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.mantle.xyz/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.mantle.xyz/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.mantle.xyz/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.mantle.xyz/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Mantle Testnet
+
+This network's chain ID is 5001.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.mantle.xyz/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.mantle.xyz/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.mantle.xyz/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.mantle.xyz/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.mantle.xyz/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.mantle.xyz/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.mantle.xyz/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.mantle.xyz/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.mantle.xyz/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Syscoin Tanenbaum Testnet
+
+This network's chain ID is 5700.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://tanenbaum.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://tanenbaum.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://tanenbaum.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://tanenbaum.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://tanenbaum.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://tanenbaum.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://tanenbaum.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://tanenbaum.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://tanenbaum.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Cascadia Testnet
+
+This network's chain ID is 6102.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.cascadia.foundation/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.cascadia.foundation/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.cascadia.foundation/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.cascadia.foundation/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.cascadia.foundation/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.cascadia.foundation/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.cascadia.foundation/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.cascadia.foundation/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.cascadia.foundation/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### ZetaChain Athens 3 Testnet
+
+This network's chain ID is 7001.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://athens3.explorer.zetachain.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://athens3.explorer.zetachain.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://athens3.explorer.zetachain.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://athens3.explorer.zetachain.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://athens3.explorer.zetachain.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://athens3.explorer.zetachain.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://athens3.explorer.zetachain.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://athens3.explorer.zetachain.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://athens3.explorer.zetachain.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Horizen EON Mainnet
+
+This network's chain ID is 7332.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://eon-explorer.horizenlabs.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://eon-explorer.horizenlabs.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://eon-explorer.horizenlabs.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://eon-explorer.horizenlabs.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://eon-explorer.horizenlabs.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://eon-explorer.horizenlabs.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://eon-explorer.horizenlabs.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://eon-explorer.horizenlabs.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://eon-explorer.horizenlabs.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Shyft Mainnet
+
+This network's chain ID is 7341.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bx.shyft.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bx.shyft.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bx.shyft.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bx.shyft.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bx.shyft.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bx.shyft.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bx.shyft.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bx.shyft.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bx.shyft.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Canto
+
+This network's chain ID is 7700.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Klaytn Mainnet Cypress
+
+This network's chain ID is 8217.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://scope.klaytn.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://scope.klaytn.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://scope.klaytn.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://scope.klaytn.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://scope.klaytn.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://scope.klaytn.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://scope.klaytn.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://scope.klaytn.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://scope.klaytn.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Base
+
+This network's chain ID is 8453.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://basescan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://basescan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://basescan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://basescan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://basescan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://basescan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://basescan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://basescan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://basescan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Evmos Testnet
+
+This network's chain ID is 9000.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.escan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.escan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.escan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.escan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.escan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.escan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.escan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.escan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.escan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Evmos
+
+This network's chain ID is 9001.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://escan.live/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://escan.live/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://escan.live/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://escan.live/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://escan.live/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://escan.live/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://escan.live/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://escan.live/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://escan.live/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Boba BNB Testnet
+
+This network's chain ID is 9728.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockexplorer.testnet.bnb.boba.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockexplorer.testnet.bnb.boba.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockexplorer.testnet.bnb.boba.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockexplorer.testnet.bnb.boba.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockexplorer.testnet.bnb.boba.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockexplorer.testnet.bnb.boba.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockexplorer.testnet.bnb.boba.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockexplorer.testnet.bnb.boba.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockexplorer.testnet.bnb.boba.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Smart Bitcoin Cash
+
+This network's chain ID is 10000.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Smart Bitcoin Cash Testnet
+
+This network's chain ID is 10001.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Japan Open Chain Testnet
+
+This network's chain ID is 10081.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.japanopenchain.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.japanopenchain.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.japanopenchain.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.japanopenchain.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.japanopenchain.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.japanopenchain.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.japanopenchain.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.japanopenchain.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.japanopenchain.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Gnosis Chiado Testnet
+
+This network's chain ID is 10200.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://blockscout.chiadochain.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://blockscout.chiadochain.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://blockscout.chiadochain.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://blockscout.chiadochain.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://blockscout.chiadochain.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://blockscout.chiadochain.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://blockscout.chiadochain.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://blockscout.chiadochain.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://blockscout.chiadochain.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Arthera Testnet
+
+This network's chain ID is 10243.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer-test.arthera.net/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer-test.arthera.net/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer-test.arthera.net/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer-test.arthera.net/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer-test.arthera.net/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer-test.arthera.net/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer-test.arthera.net/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer-test.arthera.net/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer-test.arthera.net/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Haqq Network
+
+This network's chain ID is 11235.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.haqq.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.haqq.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.haqq.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.haqq.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.haqq.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.haqq.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.haqq.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.haqq.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.haqq.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Shyft Testnet
+
+This network's chain ID is 11437.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://bx.testnet.shyft.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://bx.testnet.shyft.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://bx.testnet.shyft.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://bx.testnet.shyft.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://bx.testnet.shyft.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://bx.testnet.shyft.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://bx.testnet.shyft.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://bx.testnet.shyft.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://bx.testnet.shyft.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Polygon Supernet Arianee
+
+This network's chain ID is 11891.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://polygonsupernet.explorer.arianee.net/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://polygonsupernet.explorer.arianee.net/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://polygonsupernet.explorer.arianee.net/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://polygonsupernet.explorer.arianee.net/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://polygonsupernet.explorer.arianee.net/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://polygonsupernet.explorer.arianee.net/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://polygonsupernet.explorer.arianee.net/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://polygonsupernet.explorer.arianee.net/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://polygonsupernet.explorer.arianee.net/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### undefined
+
+This network's chain ID is 12357.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Beam Testnet
+
+This network's chain ID is 13337.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://subnets-test.avax.network/beam/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://subnets-test.avax.network/beam/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://subnets-test.avax.network/beam/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://subnets-test.avax.network/beam/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://subnets-test.avax.network/beam/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://subnets-test.avax.network/beam/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://subnets-test.avax.network/beam/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://subnets-test.avax.network/beam/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://subnets-test.avax.network/beam/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Holesky
+
+This network's chain ID is 17000.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://holesky.beaconcha.in/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://holesky.beaconcha.in/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://holesky.beaconcha.in/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://holesky.beaconcha.in/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://holesky.beaconcha.in/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://holesky.beaconcha.in/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://holesky.beaconcha.in/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://holesky.beaconcha.in/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://holesky.beaconcha.in/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Oasis Sapphire
+
+This network's chain ID is 23294.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.sapphire.oasis.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.sapphire.oasis.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.sapphire.oasis.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.sapphire.oasis.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.sapphire.oasis.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.sapphire.oasis.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.sapphire.oasis.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.sapphire.oasis.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.sapphire.oasis.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Oasis Sapphire Testnet
+
+This network's chain ID is 23295.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://testnet.explorer.sapphire.oasis.dev/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://testnet.explorer.sapphire.oasis.dev/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://testnet.explorer.sapphire.oasis.dev/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://testnet.explorer.sapphire.oasis.dev/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://testnet.explorer.sapphire.oasis.dev/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://testnet.explorer.sapphire.oasis.dev/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://testnet.explorer.sapphire.oasis.dev/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://testnet.explorer.sapphire.oasis.dev/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://testnet.explorer.sapphire.oasis.dev/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Mode
+
+This network's chain ID is 34443.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.mode.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.mode.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.mode.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.mode.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.mode.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.mode.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.mode.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.mode.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.mode.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Arbitrum One
+
+This network's chain ID is 42161.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://arbiscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://arbiscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://arbiscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://arbiscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://arbiscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://arbiscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://arbiscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://arbiscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://arbiscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Arbitrum Nova
+
+This network's chain ID is 42170.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://nova-explorer.arbitrum.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://nova-explorer.arbitrum.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://nova-explorer.arbitrum.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://nova-explorer.arbitrum.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://nova-explorer.arbitrum.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://nova-explorer.arbitrum.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://nova-explorer.arbitrum.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://nova-explorer.arbitrum.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://nova-explorer.arbitrum.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Celo Mainnet
+
+This network's chain ID is 42220.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://celoscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://celoscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://celoscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://celoscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://celoscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://celoscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://celoscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://celoscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://celoscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Avalanche Fuji Testnet
+
+This network's chain ID is 43113.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.snowtrace.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.snowtrace.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.snowtrace.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.snowtrace.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.snowtrace.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.snowtrace.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.snowtrace.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.snowtrace.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.snowtrace.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Avalanche C-Chain
+
+This network's chain ID is 43114.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://snowtrace.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://snowtrace.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://snowtrace.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://snowtrace.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://snowtrace.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://snowtrace.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://snowtrace.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://snowtrace.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://snowtrace.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Boba Avax
+
+This network's chain ID is 43288.
+
+- `compatibility_fallback_handler.sol`: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
+- `create_call.sol`: 0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d
+- `gnosis_safe.sol`: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
+- `gnosis_safe_l2.sol`: 0xfb1bffC9d739B8D520DaF37dF666da4C687191EA
+- `multi_send.sol`: 0x998739BFdAAdde7C933B942a68053933098f9EDa
+- `multi_send_call_only.sol`: 0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B
+- `proxy_factory.sol`: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
+- `sign_message_lib.sol`: 0x98FFBBF51bb33A056B08ddf711f289936AafF717
+- `simulate_tx_accessor.sol`: 0x727a77a074D1E6c4530e814F89E618a3298FC044
+
+
+### Celo Alfajores Testnet
+
+This network's chain ID is 44787.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://alfajores.celoscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://alfajores.celoscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://alfajores.celoscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://alfajores.celoscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://alfajores.celoscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://alfajores.celoscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://alfajores.celoscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://alfajores.celoscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://alfajores.celoscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Autobahn Network
+
+This network's chain ID is 45000.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### REI Network
+
+This network's chain ID is 47805.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scan.rei.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scan.rei.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scan.rei.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scan.rei.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scan.rei.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scan.rei.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scan.rei.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scan.rei.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scan.rei.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Haqq Chain Testnet
+
+This network's chain ID is 54211.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testedge2.haqq.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testedge2.haqq.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testedge2.haqq.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testedge2.haqq.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testedge2.haqq.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testedge2.haqq.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testedge2.haqq.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testedge2.haqq.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testedge2.haqq.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Boba BNB Mainnet
+
+This network's chain ID is 56288.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://blockexplorer.bnb.boba.network/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://blockexplorer.bnb.boba.network/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://blockexplorer.bnb.boba.network/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://blockexplorer.bnb.boba.network/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://blockexplorer.bnb.boba.network/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://blockexplorer.bnb.boba.network/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://blockexplorer.bnb.boba.network/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://blockexplorer.bnb.boba.network/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://blockexplorer.bnb.boba.network/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Rollux Testnet
+
+This network's chain ID is 57000.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://rollux.tanenbaum.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://rollux.tanenbaum.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://rollux.tanenbaum.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://rollux.tanenbaum.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://rollux.tanenbaum.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://rollux.tanenbaum.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://rollux.tanenbaum.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://rollux.tanenbaum.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://rollux.tanenbaum.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Sepolia PGN (Public Goods Network)
+
+This network's chain ID is 58008.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.sepolia.publicgoods.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.sepolia.publicgoods.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.sepolia.publicgoods.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.sepolia.publicgoods.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.sepolia.publicgoods.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.sepolia.publicgoods.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.sepolia.publicgoods.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.sepolia.publicgoods.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+
+
+### Linea Testnet
+
+This network's chain ID is 59140.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://goerli.lineascan.build/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://goerli.lineascan.build/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://goerli.lineascan.build/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://goerli.lineascan.build/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://goerli.lineascan.build/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://goerli.lineascan.build/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://goerli.lineascan.build/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://goerli.lineascan.build/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://goerli.lineascan.build/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Linea
+
+This network's chain ID is 59144.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://lineascan.build/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://lineascan.build/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://lineascan.build/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://lineascan.build/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://lineascan.build/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://lineascan.build/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://lineascan.build/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://lineascan.build/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://lineascan.build/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Godwoken Testnet v1
+
+This network's chain ID is 71401.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://v1.testnet.gwscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://v1.testnet.gwscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://v1.testnet.gwscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://v1.testnet.gwscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://v1.testnet.gwscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://v1.testnet.gwscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://v1.testnet.gwscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://v1.testnet.gwscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://v1.testnet.gwscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Godwoken Mainnet
+
+This network's chain ID is 71402.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://v1.gwscan.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://v1.gwscan.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://v1.gwscan.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://v1.gwscan.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://v1.gwscan.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://v1.gwscan.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://v1.gwscan.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://v1.gwscan.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://v1.gwscan.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Energy Web Volta Testnet
+
+This network's chain ID is 73799.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Mumbai
+
+This network's chain ID is 80001.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://mumbai.polygonscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://mumbai.polygonscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://mumbai.polygonscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://mumbai.polygonscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://mumbai.polygonscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://mumbai.polygonscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://mumbai.polygonscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://mumbai.polygonscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://mumbai.polygonscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Base Goerli Testnet
+
+This network's chain ID is 84531.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://goerli.basescan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://goerli.basescan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://goerli.basescan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://goerli.basescan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://goerli.basescan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://goerli.basescan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://goerli.basescan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://goerli.basescan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://goerli.basescan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Base Sepolia Testnet
+
+This network's chain ID is 84532.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://base-sepolia.blockscout.com/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://base-sepolia.blockscout.com/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://base-sepolia.blockscout.com/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://base-sepolia.blockscout.com/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://base-sepolia.blockscout.com/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://base-sepolia.blockscout.com/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://base-sepolia.blockscout.com/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://base-sepolia.blockscout.com/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://base-sepolia.blockscout.com/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Milkomeda C1 Testnet
+
+This network's chain ID is 200101.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-devnet-cardano-evm.c1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Milkomeda A1 Testnet
+
+This network's chain ID is 200202.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer-devnet-algorand-rollup.a1.milkomeda.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Polis Mainnet
+
+This network's chain ID is 333999.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Arbitrum Rinkeby
+
+This network's chain ID is 421611.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Arbitrum Goerli
+
+This network's chain ID is 421613.
+
+- `compatibility_fallback_handler.sol`: 0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4
+- `create_call.sol`: 0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4
+- `gnosis_safe.sol`: 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552
+- `gnosis_safe_l2.sol`: 0x3E5c63644E683549055b9Be8653de26E0B4CD36E
+- `multi_send.sol`: 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761
+- `multi_send_call_only.sol`: 0x40A2aCCbd92BCA938b02010E17A5b8929b49130D
+- `proxy_factory.sol`: 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2
+- `sign_message_lib.sol`: 0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2
+- `simulate_tx_accessor.sol`: 0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da
+
+
+### Arbitrum Sepolia
+
+This network's chain ID is 421614.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://sepolia-explorer.arbitrum.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://sepolia-explorer.arbitrum.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://sepolia-explorer.arbitrum.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://sepolia-explorer.arbitrum.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://sepolia-explorer.arbitrum.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://sepolia-explorer.arbitrum.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://sepolia-explorer.arbitrum.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://sepolia-explorer.arbitrum.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://sepolia-explorer.arbitrum.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Scroll Sepolia Testnet
+
+This network's chain ID is 534351.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://sepolia.scrollscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://sepolia.scrollscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://sepolia.scrollscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://sepolia.scrollscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://sepolia.scrollscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://sepolia.scrollscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://sepolia.scrollscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://sepolia.scrollscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://sepolia.scrollscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Scroll
+
+This network's chain ID is 534352.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://scrollscan.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://scrollscan.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://scrollscan.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://scrollscan.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://scrollscan.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://scrollscan.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://scrollscan.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://scrollscan.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://scrollscan.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Scroll Alpha Testnet
+
+This network's chain ID is 534353.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://alpha-blockscout.scroll.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://alpha-blockscout.scroll.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://alpha-blockscout.scroll.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://alpha-blockscout.scroll.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://alpha-blockscout.scroll.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://alpha-blockscout.scroll.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://alpha-blockscout.scroll.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://alpha-blockscout.scroll.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://alpha-blockscout.scroll.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Hypra Mainnet
+
+This network's chain ID is 622277.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.hypra.network/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.hypra.network/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.hypra.network/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.hypra.network/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.hypra.network/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.hypra.network/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.hypra.network/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.hypra.network/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.hypra.network/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Zora
+
+This network's chain ID is 7777777.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://explorer.zora.energy/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://explorer.zora.energy/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://explorer.zora.energy/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://explorer.zora.energy/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://explorer.zora.energy/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://explorer.zora.energy/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://explorer.zora.energy/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://explorer.zora.energy/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://explorer.zora.energy/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Sepolia
+
+This network's chain ID is 11155111.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://sepolia.etherscan.io/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://sepolia.etherscan.io/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://sepolia.etherscan.io/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://sepolia.etherscan.io/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://sepolia.etherscan.io/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://sepolia.etherscan.io/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://sepolia.etherscan.io/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://sepolia.etherscan.io/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://sepolia.etherscan.io/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Kanazawa
+
+This network's chain ID is 222000222.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.meldscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.meldscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.meldscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.meldscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.meldscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.meldscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.meldscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.meldscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.meldscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Neon EVM Devnet
+
+This network's chain ID is 245022926.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://devnet.neonscan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://devnet.neonscan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://devnet.neonscan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://devnet.neonscan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://devnet.neonscan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://devnet.neonscan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://devnet.neonscan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://devnet.neonscan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://devnet.neonscan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Neon EVM Mainnet
+
+This network's chain ID is 245022934.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://neonscan.org/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://neonscan.org/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://neonscan.org/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://neonscan.org/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://neonscan.org/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://neonscan.org/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://neonscan.org/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://neonscan.org/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://neonscan.org/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Meld
+
+This network's chain ID is 333000333.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://meldscan.io/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://meldscan.io/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://meldscan.io/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://meldscan.io/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://meldscan.io/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://meldscan.io/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://meldscan.io/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://meldscan.io/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://meldscan.io/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Aurora Mainnet
+
+This network's chain ID is 1313161554.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://aurorascan.dev/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://aurorascan.dev/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://aurorascan.dev/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://aurorascan.dev/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://aurorascan.dev/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://aurorascan.dev/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://aurorascan.dev/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://aurorascan.dev/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://aurorascan.dev/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Aurora Testnet
+
+This network's chain ID is 1313161555.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.aurorascan.dev/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.aurorascan.dev/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.aurorascan.dev/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.aurorascan.dev/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.aurorascan.dev/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.aurorascan.dev/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.aurorascan.dev/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.aurorascan.dev/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.aurorascan.dev/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Harmony Mainnet Shard 0
+
+This network's chain ID is 1666600000.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.harmony.one/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.harmony.one/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.harmony.one/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.harmony.one/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.harmony.one/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.harmony.one/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.harmony.one/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.harmony.one/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.harmony.one/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Harmony Testnet Shard 0
+
+This network's chain ID is 1666700000.
+
+- `compatibility_fallback_handler.sol`: [0x017062a1dE2FE6b99BE3d9d37841FeD19F573804](https://explorer.testnet.harmony.one/address/0x017062a1dE2FE6b99BE3d9d37841FeD19F573804)
+- `create_call.sol`: [0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d](https://explorer.testnet.harmony.one/address/0xB19D6FFc2182150F8Eb585b79D4ABcd7C5640A9d)
+- `gnosis_safe.sol`: [0x69f4D1788e39c87893C980c06EdF4b7f686e2938](https://explorer.testnet.harmony.one/address/0x69f4D1788e39c87893C980c06EdF4b7f686e2938)
+- `gnosis_safe_l2.sol`: [0xfb1bffC9d739B8D520DaF37dF666da4C687191EA](https://explorer.testnet.harmony.one/address/0xfb1bffC9d739B8D520DaF37dF666da4C687191EA)
+- `multi_send.sol`: [0x998739BFdAAdde7C933B942a68053933098f9EDa](https://explorer.testnet.harmony.one/address/0x998739BFdAAdde7C933B942a68053933098f9EDa)
+- `multi_send_call_only.sol`: [0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B](https://explorer.testnet.harmony.one/address/0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B)
+- `proxy_factory.sol`: [0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC](https://explorer.testnet.harmony.one/address/0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC)
+- `sign_message_lib.sol`: [0x98FFBBF51bb33A056B08ddf711f289936AafF717](https://explorer.testnet.harmony.one/address/0x98FFBBF51bb33A056B08ddf711f289936AafF717)
+- `simulate_tx_accessor.sol`: [0x727a77a074D1E6c4530e814F89E618a3298FC044](https://explorer.testnet.harmony.one/address/0x727a77a074D1E6c4530e814F89E618a3298FC044)
+
+
+### Palm Testnet
+
+This network's chain ID is 11297108099.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://testnet.palm.chainlens.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://testnet.palm.chainlens.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://testnet.palm.chainlens.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://testnet.palm.chainlens.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://testnet.palm.chainlens.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://testnet.palm.chainlens.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://testnet.palm.chainlens.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://testnet.palm.chainlens.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://testnet.palm.chainlens.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+### Palm
+
+This network's chain ID is 11297108109.
+
+- `compatibility_fallback_handler.sol`: [0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4](https://palm.chainlens.com/address/0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4)
+- `create_call.sol`: [0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4](https://palm.chainlens.com/address/0x7cbB62EaA69F79e6873cD1ecB2392971036cFAa4)
+- `gnosis_safe.sol`: [0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552](https://palm.chainlens.com/address/0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552)
+- `gnosis_safe_l2.sol`: [0x3E5c63644E683549055b9Be8653de26E0B4CD36E](https://palm.chainlens.com/address/0x3E5c63644E683549055b9Be8653de26E0B4CD36E)
+- `multi_send.sol`: [0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761](https://palm.chainlens.com/address/0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761)
+- `multi_send_call_only.sol`: [0x40A2aCCbd92BCA938b02010E17A5b8929b49130D](https://palm.chainlens.com/address/0x40A2aCCbd92BCA938b02010E17A5b8929b49130D)
+- `proxy_factory.sol`: [0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2](https://palm.chainlens.com/address/0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2)
+- `sign_message_lib.sol`: [0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2](https://palm.chainlens.com/address/0xA65387F16B013cf2Af4605Ad8aA5ec25a2cbA3a2)
+- `simulate_tx_accessor.sol`: [0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da](https://palm.chainlens.com/address/0x59AD6735bCd8152B84860Cb256dD9e96b85F69Da)
+
+
+
\ No newline at end of file
diff --git a/pages/smart-account-supported-networks/v1.4.1.md b/pages/smart-account-supported-networks/v1.4.1.md
new file mode 100644
index 00000000..d1d9e3e2
--- /dev/null
+++ b/pages/smart-account-supported-networks/v1.4.1.md
@@ -0,0 +1,382 @@
+# v1.4.1
+
+This page lists the addresses of all the Safe contracts `v1.4.1` grouped by chain.
+
+## Networks
+
+### Ethereum Mainnet
+
+This network's chain ID is 1.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Goerli
+
+This network's chain ID is 5.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://goerli.etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://goerli.etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://goerli.etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://goerli.etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://goerli.etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://goerli.etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://goerli.etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://goerli.etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://goerli.etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### OP Mainnet
+
+This network's chain ID is 10.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://optimistic.etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://optimistic.etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://optimistic.etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://optimistic.etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://optimistic.etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://optimistic.etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://optimistic.etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://optimistic.etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://optimistic.etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### BNB Smart Chain Mainnet
+
+This network's chain ID is 56.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://bscscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://bscscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://bscscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://bscscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://bscscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://bscscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://bscscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://bscscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://bscscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Conflux eSpace (Testnet)
+
+This network's chain ID is 71.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://evmtestnet.confluxscan.net/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://evmtestnet.confluxscan.net/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://evmtestnet.confluxscan.net/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://evmtestnet.confluxscan.net/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://evmtestnet.confluxscan.net/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://evmtestnet.confluxscan.net/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://evmtestnet.confluxscan.net/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://evmtestnet.confluxscan.net/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://evmtestnet.confluxscan.net/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Gnosis
+
+This network's chain ID is 100.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://gnosisscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://gnosisscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://gnosisscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://gnosisscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://gnosisscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://gnosisscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://gnosisscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://gnosisscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://gnosisscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Polygon Mainnet
+
+This network's chain ID is 137.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://polygonscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://polygonscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://polygonscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://polygonscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://polygonscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://polygonscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://polygonscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://polygonscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://polygonscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Conflux eSpace
+
+This network's chain ID is 1030.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://evm.confluxscan.net/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://evm.confluxscan.net/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://evm.confluxscan.net/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://evm.confluxscan.net/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://evm.confluxscan.net/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://evm.confluxscan.net/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://evm.confluxscan.net/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://evm.confluxscan.net/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://evm.confluxscan.net/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Polygon zkEVM
+
+This network's chain ID is 1101.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://zkevm.polygonscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://zkevm.polygonscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://zkevm.polygonscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://zkevm.polygonscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://zkevm.polygonscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://zkevm.polygonscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://zkevm.polygonscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://zkevm.polygonscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://zkevm.polygonscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Polygon zkEVM Testnet
+
+This network's chain ID is 1442.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://explorer.public.zkevm-test.net/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://explorer.public.zkevm-test.net/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://explorer.public.zkevm-test.net/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://explorer.public.zkevm-test.net/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://explorer.public.zkevm-test.net/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://explorer.public.zkevm-test.net/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://explorer.public.zkevm-test.net/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://explorer.public.zkevm-test.net/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://explorer.public.zkevm-test.net/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Beam
+
+This network's chain ID is 4337.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://subnets.avax.network/beam/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://subnets.avax.network/beam/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://subnets.avax.network/beam/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://subnets.avax.network/beam/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://subnets.avax.network/beam/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://subnets.avax.network/beam/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://subnets.avax.network/beam/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://subnets.avax.network/beam/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://subnets.avax.network/beam/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Torus Mainnet
+
+This network's chain ID is 8192.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://toruscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://toruscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://toruscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://toruscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://toruscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://toruscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://toruscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://toruscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://toruscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Torus Testnet
+
+This network's chain ID is 8194.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://testnet.toruscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://testnet.toruscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://testnet.toruscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://testnet.toruscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://testnet.toruscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://testnet.toruscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://testnet.toruscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://testnet.toruscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://testnet.toruscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Base
+
+This network's chain ID is 8453.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://basescan.org/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://basescan.org/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://basescan.org/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://basescan.org/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://basescan.org/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://basescan.org/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://basescan.org/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://basescan.org/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://basescan.org/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Arthera Testnet
+
+This network's chain ID is 10243.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://explorer-test.arthera.net/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://explorer-test.arthera.net/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://explorer-test.arthera.net/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://explorer-test.arthera.net/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://explorer-test.arthera.net/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://explorer-test.arthera.net/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://explorer-test.arthera.net/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://explorer-test.arthera.net/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://explorer-test.arthera.net/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Haqq Network
+
+This network's chain ID is 11235.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://explorer.haqq.network/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://explorer.haqq.network/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://explorer.haqq.network/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://explorer.haqq.network/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://explorer.haqq.network/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://explorer.haqq.network/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://explorer.haqq.network/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://explorer.haqq.network/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://explorer.haqq.network/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Beam Testnet
+
+This network's chain ID is 13337.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://subnets-test.avax.network/beam/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://subnets-test.avax.network/beam/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://subnets-test.avax.network/beam/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://subnets-test.avax.network/beam/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://subnets-test.avax.network/beam/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://subnets-test.avax.network/beam/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://subnets-test.avax.network/beam/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://subnets-test.avax.network/beam/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://subnets-test.avax.network/beam/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Holesky
+
+This network's chain ID is 17000.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://holesky.beaconcha.in/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://holesky.beaconcha.in/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://holesky.beaconcha.in/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://holesky.beaconcha.in/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://holesky.beaconcha.in/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://holesky.beaconcha.in/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://holesky.beaconcha.in/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://holesky.beaconcha.in/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://holesky.beaconcha.in/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Arbitrum One
+
+This network's chain ID is 42161.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://arbiscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://arbiscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://arbiscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://arbiscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://arbiscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://arbiscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://arbiscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://arbiscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://arbiscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Celo Mainnet
+
+This network's chain ID is 42220.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://celoscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://celoscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://celoscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://celoscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://celoscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://celoscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://celoscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://celoscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://celoscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Haqq Chain Testnet
+
+This network's chain ID is 54211.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://explorer.testedge2.haqq.network/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://explorer.testedge2.haqq.network/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://explorer.testedge2.haqq.network/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://explorer.testedge2.haqq.network/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://explorer.testedge2.haqq.network/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://explorer.testedge2.haqq.network/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://explorer.testedge2.haqq.network/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://explorer.testedge2.haqq.network/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://explorer.testedge2.haqq.network/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Mumbai
+
+This network's chain ID is 80001.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://mumbai.polygonscan.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://mumbai.polygonscan.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://mumbai.polygonscan.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://mumbai.polygonscan.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://mumbai.polygonscan.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://mumbai.polygonscan.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://mumbai.polygonscan.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://mumbai.polygonscan.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://mumbai.polygonscan.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Base Goerli Testnet
+
+This network's chain ID is 84531.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://goerli.basescan.org/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://goerli.basescan.org/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://goerli.basescan.org/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://goerli.basescan.org/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://goerli.basescan.org/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://goerli.basescan.org/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://goerli.basescan.org/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://goerli.basescan.org/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://goerli.basescan.org/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Base Sepolia Testnet
+
+This network's chain ID is 84532.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://base-sepolia.blockscout.com/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://base-sepolia.blockscout.com/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://base-sepolia.blockscout.com/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://base-sepolia.blockscout.com/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://base-sepolia.blockscout.com/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://base-sepolia.blockscout.com/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://base-sepolia.blockscout.com/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://base-sepolia.blockscout.com/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://base-sepolia.blockscout.com/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+### Sepolia
+
+This network's chain ID is 11155111.
+
+- `compatibility_fallback_handler.sol`: [0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99](https://sepolia.etherscan.io/address/0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99)
+- `create_call.sol`: [0x9b35Af71d77eaf8d7e40252370304687390A1A52](https://sepolia.etherscan.io/address/0x9b35Af71d77eaf8d7e40252370304687390A1A52)
+- `multi_send.sol`: [0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526](https://sepolia.etherscan.io/address/0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526)
+- `multi_send_call_only.sol`: [0x9641d764fc13c8B624c04430C7356C1C7C8102e2](https://sepolia.etherscan.io/address/0x9641d764fc13c8B624c04430C7356C1C7C8102e2)
+- `safe.sol`: [0x41675C099F32341bf84BFc5382aF534df5C7461a](https://sepolia.etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a)
+- `safe_l2.sol`: [0x29fcB43b46531BcA003ddC8FCB67FFE91900C762](https://sepolia.etherscan.io/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762)
+- `safe_proxy_factory.sol`: [0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67](https://sepolia.etherscan.io/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67)
+- `sign_message_lib.sol`: [0xd53cd0aB83D845Ac265BE939c57F53AD838012c9](https://sepolia.etherscan.io/address/0xd53cd0aB83D845Ac265BE939c57F53AD838012c9)
+- `simulate_tx_accessor.sol`: [0x3d4BA2E0884aa488718476ca2FB8Efc291A46199](https://sepolia.etherscan.io/address/0x3d4BA2E0884aa488718476ca2FB8Efc291A46199)
+
+
+
\ No newline at end of file
diff --git a/pages/what-is-safe.md b/pages/what-is-safe.md
new file mode 100644
index 00000000..c1ccf6c8
--- /dev/null
+++ b/pages/what-is-safe.md
@@ -0,0 +1,31 @@
+---
+description: Everything you need to know to start building on Safe.
+---
+
+# Safe
+
+[Safe](https://safe.global) brings digital ownership of accounts to everyone by building universal and open contract standards for the custody of digital assets, data, and identity.
+
+Safe is at the forefront of modular smart account infrastructure, paving the way for developers to create various applications and wallets.
+
+Safe\{Core\} consists of three components:
+
+
+
+## Safe\{Core\} Protocol
+
+The [Safe\{Core\} Protocol](./protocol-overview.mdx) is an open, modular framework to make smart accounts secure, portable, and composable.
+
+This section in the documentation has information and relevant links about the Safe\{Core\} Protocol and the different elements involved.
+
+## Safe\{Core\} AA SDK
+
+The [Safe\{Core\} Account Abstraction SDK](./sdk-overview.md) is a set of developer kits that help integrate Safe with different external service providers. The SDK offers developers the ability to abstract the complexity that comes with operating a smart contract account.
+
+This section in the documentation has relevant information and tutorials on the SDK kits and how to integrate them.
+
+## Safe\{Core\} API
+
+The [Safe\{Core\} API](./api-supported-networks.md) refers to all the Safe infrastructure needed to power interfaces with all Safe account related information. This includes the Safe Transaction Service, Safe Events Service, etc.
+
+This section in the documentation has information related to the services architecture.
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..75b12933
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,8661 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@emotion/cache':
+ specifier: ^11.11.0
+ version: 11.11.0
+ '@emotion/react':
+ specifier: ^11.11.1
+ version: 11.11.1(@types/react@18.2.37)(react@18.2.0)
+ '@emotion/styled':
+ specifier: ^11.11.0
+ version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
+ '@mui/material':
+ specifier: ^5.14.18
+ version: 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
+ '@preact/signals':
+ specifier: ^1.2.2
+ version: 1.2.2(preact@10.19.3)
+ '@svgr/webpack':
+ specifier: ^8.1.0
+ version: 8.1.0(typescript@4.9.3)
+ cypress:
+ specifier: ^13.6.3
+ version: 13.6.3
+ fuse.js:
+ specifier: ^7.0.0
+ version: 7.0.0
+ markdown-link-check:
+ specifier: ^3.11.2
+ version: 3.11.2
+ next:
+ specifier: ^14.0.3
+ version: 14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0)
+ nextra:
+ specifier: 2.13.2
+ version: 2.13.2(next@14.0.3)(react-dom@18.2.0)(react@18.2.0)
+ nextra-theme-docs:
+ specifier: 2.13.2
+ version: 2.13.2(next@14.0.3)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0)
+ node-fetch:
+ specifier: ^3.3.2
+ version: 3.3.2
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ react-ga4:
+ specifier: ^2.1.0
+ version: 2.1.0
+ shelljs:
+ specifier: ^0.8.5
+ version: 0.8.5
+
+devDependencies:
+ '@next/eslint-plugin-next':
+ specifier: ^14.0.4
+ version: 14.0.4
+ '@types/node':
+ specifier: 18.11.10
+ version: 18.11.10
+ '@types/react':
+ specifier: 18.2.37
+ version: 18.2.37
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^6.15.0
+ version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@4.9.3)
+ '@typescript-eslint/parser':
+ specifier: ^6.15.0
+ version: 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ env-cmd:
+ specifier: ^10.1.0
+ version: 10.1.0
+ eslint:
+ specifier: ^8.56.0
+ version: 8.56.0
+ eslint-config-next:
+ specifier: ^14.0.4
+ version: 14.0.4(eslint@8.56.0)(typescript@4.9.3)
+ eslint-config-standard:
+ specifier: ^17.1.0
+ version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)
+ eslint-config-standard-jsx:
+ specifier: ^11.0.0
+ version: 11.0.0(eslint-plugin-react@7.33.2)(eslint@8.56.0)
+ eslint-config-standard-with-typescript:
+ specifier: ^43.0.0
+ version: 43.0.0(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@4.9.3)
+ eslint-plugin-import:
+ specifier: ^2.25.2
+ version: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-n:
+ specifier: ^16.5.0
+ version: 16.5.0(eslint@8.56.0)
+ eslint-plugin-node:
+ specifier: ^11.1.0
+ version: 11.1.0(eslint@8.56.0)
+ eslint-plugin-promise:
+ specifier: ^6.1.1
+ version: 6.1.1(eslint@8.56.0)
+ eslint-plugin-react:
+ specifier: ^7.33.2
+ version: 7.33.2(eslint@8.56.0)
+ eslint-plugin-security:
+ specifier: ^2.1.0
+ version: 2.1.0
+ husky:
+ specifier: ^8.0.3
+ version: 8.0.3
+ serve:
+ specifier: ^14.2.1
+ version: 14.2.1
+ typescript:
+ specifier: ^4.9.3
+ version: 4.9.3
+
+packages:
+
+ /@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /@ampproject/remapping@2.2.1:
+ resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.20
+ dev: false
+
+ /@babel/code-frame@7.23.5:
+ resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.23.4
+ chalk: 2.4.2
+ dev: false
+
+ /@babel/compat-data@7.23.5:
+ resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/core@7.23.5:
+ resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helpers': 7.23.5
+ '@babel/parser': 7.23.5
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.5
+ '@babel/types': 7.23.5
+ convert-source-map: 2.0.0
+ debug: 4.3.4(supports-color@8.1.1)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/generator@7.23.5:
+ resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.20
+ jsesc: 2.5.2
+ dev: false
+
+ /@babel/helper-annotate-as-pure@7.22.5:
+ resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
+ resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-compilation-targets@7.22.15:
+ resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.22.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: false
+
+ /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ semver: 6.3.1
+ dev: false
+
+ /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5):
+ resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ regexpu-core: 5.3.2
+ semver: 6.3.1
+ dev: false
+
+ /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ debug: 4.3.4(supports-color@8.1.1)
+ lodash.debounce: 4.0.8
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/helper-environment-visitor@7.22.20:
+ resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-function-name@7.23.0:
+ resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-hoist-variables@7.22.5:
+ resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-member-expression-to-functions@7.23.0:
+ resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-module-imports@7.22.15:
+ resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-simple-access': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: false
+
+ /@babel/helper-optimise-call-expression@7.22.5:
+ resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-plugin-utils@7.22.5:
+ resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5):
+ resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-wrap-function': 7.22.20
+ dev: false
+
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5):
+ resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ dev: false
+
+ /@babel/helper-simple-access@7.22.5:
+ resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+ resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-split-export-declaration@7.22.6:
+ resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helper-string-parser@7.23.4:
+ resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-validator-identifier@7.22.20:
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-validator-option@7.23.5:
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-wrap-function@7.22.20:
+ resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-function-name': 7.23.0
+ '@babel/template': 7.22.15
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/helpers@7.23.5:
+ resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.5
+ '@babel/types': 7.23.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/highlight@7.23.4:
+ resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: false
+
+ /@babel/parser@7.23.5:
+ resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.13.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5):
+ resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5):
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5):
+ resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5)
+ '@babel/helper-split-export-declaration': 7.22.6
+ globals: 11.12.0
+ dev: false
+
+ /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/template': 7.22.15
+ dev: false
+
+ /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-simple-access': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: false
+
+ /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.5):
+ resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5)
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ regenerator-transform: 0.15.2
+ dev: false
+
+ /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5)
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: false
+
+ /@babel/preset-env@7.23.5(@babel/core@7.23.5):
+ resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.5
+ '@babel/helper-compilation-targets': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5)
+ '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5)
+ '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5)
+ '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5)
+ babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5)
+ babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5)
+ babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5)
+ core-js-compat: 3.33.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5):
+ resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/types': 7.23.5
+ esutils: 2.0.3
+ dev: false
+
+ /@babel/preset-react@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5)
+ '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.5)
+ '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/preset-typescript@7.23.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-validator-option': 7.23.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5)
+ dev: false
+
+ /@babel/regjsgen@0.8.0:
+ resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+ dev: false
+
+ /@babel/runtime@7.23.5:
+ resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.0
+
+ /@babel/template@7.22.15:
+ resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
+ dev: false
+
+ /@babel/traverse@7.23.5:
+ resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
+ debug: 4.3.4(supports-color@8.1.1)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/types@7.23.5:
+ resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+ dev: false
+
+ /@braintree/sanitize-url@6.0.4:
+ resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==}
+ dev: false
+
+ /@colors/colors@1.5.0:
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ engines: {node: '>=0.1.90'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@cypress/request@3.0.1:
+ resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==}
+ engines: {node: '>= 6'}
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.12.0
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ http-signature: 1.3.6
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.35
+ performance-now: 2.1.0
+ qs: 6.10.4
+ safe-buffer: 5.2.1
+ tough-cookie: 4.1.3
+ tunnel-agent: 0.6.0
+ uuid: 8.3.2
+ dev: false
+
+ /@cypress/xvfb@1.2.4(supports-color@8.1.1):
+ resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==}
+ dependencies:
+ debug: 3.2.7(supports-color@8.1.1)
+ lodash.once: 4.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@emotion/babel-plugin@11.11.0:
+ resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
+ dependencies:
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/runtime': 7.23.5
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/serialize': 1.1.2
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/cache@11.11.0:
+ resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
+ dev: false
+
+ /@emotion/is-prop-valid@1.2.1:
+ resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ dev: false
+
+ /@emotion/memoize@0.8.1:
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
+ dev: false
+
+ /@emotion/react@11.11.1(@types/react@18.2.37)(react@18.2.0):
+ resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/cache': 11.11.0
+ '@emotion/serialize': 1.1.2
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ '@types/react': 18.2.37
+ hoist-non-react-statics: 3.3.2
+ react: 18.2.0
+ dev: false
+
+ /@emotion/serialize@1.1.2:
+ resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==}
+ dependencies:
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/unitless': 0.8.1
+ '@emotion/utils': 1.2.1
+ csstype: 3.1.2
+ dev: false
+
+ /@emotion/sheet@1.2.2:
+ resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
+ dev: false
+
+ /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0):
+ resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==}
+ peerDependencies:
+ '@emotion/react': ^11.0.0-rc.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/is-prop-valid': 1.2.1
+ '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
+ '@emotion/serialize': 1.1.2
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@emotion/utils': 1.2.1
+ '@types/react': 18.2.37
+ react: 18.2.0
+ dev: false
+
+ /@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
+ dev: false
+
+ /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0):
+ resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@emotion/utils@1.2.1:
+ resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
+ dev: false
+
+ /@emotion/weak-memoize@0.3.1:
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
+ dev: false
+
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.56.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.10.0:
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4(supports-color@8.1.1)
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.0
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js@8.56.0:
+ resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@floating-ui/core@1.5.0:
+ resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==}
+ dependencies:
+ '@floating-ui/utils': 0.1.6
+ dev: false
+
+ /@floating-ui/dom@1.5.3:
+ resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==}
+ dependencies:
+ '@floating-ui/core': 1.5.0
+ '@floating-ui/utils': 0.1.6
+ dev: false
+
+ /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/dom': 1.5.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@floating-ui/utils@0.1.6:
+ resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==}
+ dev: false
+
+ /@headlessui/react@1.7.10(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: ^16 || ^17 || ^18
+ react-dom: ^16 || ^17 || ^18
+ dependencies:
+ client-only: 0.0.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@humanwhocodes/config-array@0.11.13:
+ resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.1
+ debug: 4.3.4(supports-color@8.1.1)
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema@2.0.1:
+ resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.3:
+ resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.20
+ dev: false
+
+ /@jridgewell/resolve-uri@3.1.1:
+ resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
+ /@jridgewell/set-array@1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ dev: false
+
+ /@jridgewell/trace-mapping@0.3.20:
+ resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: false
+
+ /@mdx-js/mdx@2.3.0:
+ resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ '@types/mdx': 2.0.3
+ estree-util-build-jsx: 2.2.0
+ estree-util-is-identifier-name: 2.0.1
+ estree-util-to-js: 1.1.0
+ estree-walker: 3.0.1
+ hast-util-to-estree: 2.1.0
+ markdown-extensions: 1.1.1
+ periscopic: 3.0.4
+ remark-mdx: 2.1.5
+ remark-parse: 10.0.1
+ remark-rehype: 10.1.0
+ unified: 10.1.2
+ unist-util-position-from-estree: 1.1.1
+ unist-util-stringify-position: 3.0.2
+ unist-util-visit: 4.1.1
+ vfile: 5.3.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@mdx-js/react@2.3.0(react@18.2.0):
+ resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
+ peerDependencies:
+ react: '>=16'
+ dependencies:
+ '@types/mdx': 2.0.3
+ '@types/react': 18.2.37
+ react: 18.2.0
+ dev: false
+
+ /@mui/base@5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0)
+ '@mui/types': 7.2.9(@types/react@18.2.37)
+ '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
+ '@popperjs/core': 2.11.8
+ '@types/react': 18.2.37
+ clsx: 2.0.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@mui/core-downloads-tracker@5.14.18:
+ resolution: {integrity: sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==}
+ dev: false
+
+ /@mui/material@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
+ '@mui/base': 5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
+ '@mui/core-downloads-tracker': 5.14.18
+ '@mui/system': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0)
+ '@mui/types': 7.2.9(@types/react@18.2.37)
+ '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
+ '@types/react': 18.2.37
+ '@types/react-transition-group': 4.4.9
+ clsx: 2.0.0
+ csstype: 3.1.2
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-is: 18.2.0
+ react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
+ dev: false
+
+ /@mui/private-theming@5.14.18(@types/react@18.2.37)(react@18.2.0):
+ resolution: {integrity: sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
+ '@types/react': 18.2.37
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/styled-engine@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0):
+ resolution: {integrity: sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.4.1
+ '@emotion/styled': ^11.3.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@emotion/cache': 11.11.0
+ '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
+ csstype: 3.1.2
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/system@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0):
+ resolution: {integrity: sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
+ '@mui/private-theming': 5.14.18(@types/react@18.2.37)(react@18.2.0)
+ '@mui/styled-engine': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
+ '@mui/types': 7.2.9(@types/react@18.2.37)
+ '@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
+ '@types/react': 18.2.37
+ clsx: 2.0.0
+ csstype: 3.1.2
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/types@7.2.9(@types/react@18.2.37):
+ resolution: {integrity: sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg==}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.37
+ dev: false
+
+ /@mui/utils@5.14.18(@types/react@18.2.37)(react@18.2.0):
+ resolution: {integrity: sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.5
+ '@types/prop-types': 15.7.11
+ '@types/react': 18.2.37
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-is: 18.2.0
+ dev: false
+
+ /@napi-rs/simple-git-android-arm-eabi@0.1.9:
+ resolution: {integrity: sha512-9D4JnfePMpgL4pg9aMUX7/TIWEUQ+Tgx8n3Pf8TNCMGjUbImJyYsDSLJzbcv9wH7srgn4GRjSizXFJHAPjzEug==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-android-arm64@0.1.9:
+ resolution: {integrity: sha512-Krilsw0gPrrASZzudNEl9pdLuNbhoTK0j7pUbfB8FRifpPdFB/zouwuEm0aSnsDXN4ftGrmGG82kuiR/2MeoPg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-darwin-arm64@0.1.9:
+ resolution: {integrity: sha512-H/F09nDgYjv4gcFrZBgdTKkZEepqt0KLYcCJuUADuxkKupmjLdecMhypXLk13AzvLW4UQI7NlLTLDXUFLyr2BA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-darwin-x64@0.1.9:
+ resolution: {integrity: sha512-jBR2xS9nVPqmHv0TWz874W0m/d453MGrMeLjB+boK5IPPLhg3AWIZj0aN9jy2Je1BGVAa0w3INIQJtBBeB6kFA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-linux-arm-gnueabihf@0.1.9:
+ resolution: {integrity: sha512-3n0+VpO4YfZxndZ0sCvsHIvsazd+JmbSjrlTRBCnJeAU1/sfos3skNZtKGZksZhjvd+3o+/GFM8L7Xnv01yggA==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-linux-arm64-gnu@0.1.9:
+ resolution: {integrity: sha512-lIzf0KHU2SKC12vMrWwCtysG2Sdt31VHRPMUiz9lD9t3xwVn8qhFSTn5yDkTeG3rgX6o0p5EKalfQN5BXsJq2w==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-linux-arm64-musl@0.1.9:
+ resolution: {integrity: sha512-KQozUoNXrxrB8k741ncWXSiMbjl1AGBGfZV21PANzUM8wH4Yem2bg3kfglYS/QIx3udspsT35I9abu49n7D1/w==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-linux-x64-gnu@0.1.9:
+ resolution: {integrity: sha512-O/Niui5mnHPcK3iYC3ui8wgERtJWsQ3Y74W/09t0bL/3dgzGMl4oQt0qTj9dWCsnoGsIEYHPzwCBp/2vqYp/pw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-linux-x64-musl@0.1.9:
+ resolution: {integrity: sha512-L9n+e8Wn3hKr3RsIdY8GaB+ry4xZ4BaGwyKExgoB8nDGQuRUY9oP6p0WA4hWfJvJnU1H6hvo36a5UFPReyBO7A==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-win32-arm64-msvc@0.1.9:
+ resolution: {integrity: sha512-Z6Ja/SZK+lMvRWaxj7wjnvSbAsGrH006sqZo8P8nxKUdZfkVvoCaAWr1r0cfkk2Z3aijLLtD+vKeXGlUPH6gGQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git-win32-x64-msvc@0.1.9:
+ resolution: {integrity: sha512-VAZj1UvC+R2MjKOD3I/Y7dmQlHWAYy4omhReQJRpbCf+oGCBi9CWiIduGqeYEq723nLIKdxP7XjaO0wl1NnUww==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@napi-rs/simple-git@0.1.9:
+ resolution: {integrity: sha512-qKzDS0+VjMvVyU28px+C6zlD1HKy83NIdYzfMQWa/g/V1iG/Ic8uwrS2ihHfm7mp7X0PPrmINLiTTi6ieUIKfw==}
+ engines: {node: '>= 10'}
+ optionalDependencies:
+ '@napi-rs/simple-git-android-arm-eabi': 0.1.9
+ '@napi-rs/simple-git-android-arm64': 0.1.9
+ '@napi-rs/simple-git-darwin-arm64': 0.1.9
+ '@napi-rs/simple-git-darwin-x64': 0.1.9
+ '@napi-rs/simple-git-linux-arm-gnueabihf': 0.1.9
+ '@napi-rs/simple-git-linux-arm64-gnu': 0.1.9
+ '@napi-rs/simple-git-linux-arm64-musl': 0.1.9
+ '@napi-rs/simple-git-linux-x64-gnu': 0.1.9
+ '@napi-rs/simple-git-linux-x64-musl': 0.1.9
+ '@napi-rs/simple-git-win32-arm64-msvc': 0.1.9
+ '@napi-rs/simple-git-win32-x64-msvc': 0.1.9
+ dev: false
+
+ /@next/env@14.0.3:
+ resolution: {integrity: sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==}
+ dev: false
+
+ /@next/eslint-plugin-next@14.0.4:
+ resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==}
+ dependencies:
+ glob: 7.1.7
+ dev: true
+
+ /@next/swc-darwin-arm64@14.0.3:
+ resolution: {integrity: sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-darwin-x64@14.0.3:
+ resolution: {integrity: sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-arm64-gnu@14.0.3:
+ resolution: {integrity: sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-arm64-musl@14.0.3:
+ resolution: {integrity: sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-x64-gnu@14.0.3:
+ resolution: {integrity: sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-x64-musl@14.0.3:
+ resolution: {integrity: sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-win32-arm64-msvc@14.0.3:
+ resolution: {integrity: sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-win32-ia32-msvc@14.0.3:
+ resolution: {integrity: sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-win32-x64-msvc@14.0.3:
+ resolution: {integrity: sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@nodelib/fs.scandir@2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat@2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /@nodelib/fs.walk@1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.16.0
+ dev: true
+
+ /@popperjs/core@2.11.8:
+ resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
+ dev: false
+
+ /@preact/signals-core@1.5.1:
+ resolution: {integrity: sha512-dE6f+WCX5ZUDwXzUIWNMhhglmuLpqJhuy3X3xHrhZYI0Hm2LyQwOu0l9mdPiWrVNsE+Q7txOnJPgtIqHCYoBVA==}
+ dev: false
+
+ /@preact/signals@1.2.2(preact@10.19.3):
+ resolution: {integrity: sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==}
+ peerDependencies:
+ preact: 10.x
+ dependencies:
+ '@preact/signals-core': 1.5.1
+ preact: 10.19.3
+ dev: false
+
+ /@rushstack/eslint-patch@1.6.1:
+ resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==}
+ dev: true
+
+ /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ dev: false
+
+ /@svgr/babel-preset@8.1.0(@babel/core@7.23.5):
+ resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.23.5)
+ '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.23.5)
+ dev: false
+
+ /@svgr/core@8.1.0(typescript@4.9.3):
+ resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@babel/core': 7.23.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.23.5)
+ camelcase: 6.3.0
+ cosmiconfig: 8.3.6(typescript@4.9.3)
+ snake-case: 3.0.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: false
+
+ /@svgr/hast-util-to-babel-ast@8.0.0:
+ resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@babel/types': 7.23.5
+ entities: 4.5.0
+ dev: false
+
+ /@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0):
+ resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@svgr/core': '*'
+ dependencies:
+ '@babel/core': 7.23.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.23.5)
+ '@svgr/core': 8.1.0(typescript@4.9.3)
+ '@svgr/hast-util-to-babel-ast': 8.0.0
+ svg-parser: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@svgr/core': '*'
+ dependencies:
+ '@svgr/core': 8.1.0(typescript@4.9.3)
+ cosmiconfig: 8.3.6(typescript@4.9.3)
+ deepmerge: 4.3.1
+ svgo: 3.0.4
+ transitivePeerDependencies:
+ - typescript
+ dev: false
+
+ /@svgr/webpack@8.1.0(typescript@4.9.3):
+ resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.5)
+ '@babel/preset-env': 7.23.5(@babel/core@7.23.5)
+ '@babel/preset-react': 7.23.3(@babel/core@7.23.5)
+ '@babel/preset-typescript': 7.23.3(@babel/core@7.23.5)
+ '@svgr/core': 8.1.0(typescript@4.9.3)
+ '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0)
+ '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0)(typescript@4.9.3)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: false
+
+ /@swc/helpers@0.5.2:
+ resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==}
+ dependencies:
+ tslib: 2.4.1
+ dev: false
+
+ /@theguild/remark-mermaid@0.0.5(react@18.2.0):
+ resolution: {integrity: sha512-e+ZIyJkEv9jabI4m7q29wZtZv+2iwPGsXJ2d46Zi7e+QcFudiyuqhLhHG/3gX3ZEB+hxTch+fpItyMS8jwbIcw==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ mermaid: 10.6.1
+ react: 18.2.0
+ unist-util-visit: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@theguild/remark-npm2yarn@0.2.1:
+ resolution: {integrity: sha512-jUTFWwDxtLEFtGZh/TW/w30ySaDJ8atKWH8dq2/IiQF61dPrGfETpl0WxD0VdBfuLOeU14/kop466oBSRO/5CA==}
+ dependencies:
+ npm-to-yarn: 2.1.0
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /@trysound/sax@0.2.0:
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+ dev: false
+
+ /@types/acorn@4.0.6:
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+ dependencies:
+ '@types/estree': 1.0.0
+ dev: false
+
+ /@types/d3-scale-chromatic@3.0.3:
+ resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==}
+ dev: false
+
+ /@types/d3-scale@4.0.8:
+ resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==}
+ dependencies:
+ '@types/d3-time': 3.0.3
+ dev: false
+
+ /@types/d3-time@3.0.3:
+ resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==}
+ dev: false
+
+ /@types/debug@4.1.7:
+ resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+ dependencies:
+ '@types/ms': 0.7.31
+ dev: false
+
+ /@types/estree-jsx@1.0.0:
+ resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==}
+ dependencies:
+ '@types/estree': 1.0.0
+ dev: false
+
+ /@types/estree@1.0.0:
+ resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+ dev: false
+
+ /@types/hast@2.3.4:
+ resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /@types/hast@3.0.3:
+ resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /@types/js-yaml@4.0.5:
+ resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
+ dev: false
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ dev: true
+
+ /@types/json5@0.0.29:
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ dev: true
+
+ /@types/katex@0.11.1:
+ resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==}
+ dev: false
+
+ /@types/katex@0.16.7:
+ resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
+ dev: false
+
+ /@types/mdast@3.0.10:
+ resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /@types/mdast@4.0.3:
+ resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
+ /@types/mdx@2.0.3:
+ resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
+ dev: false
+
+ /@types/ms@0.7.31:
+ resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
+ dev: false
+
+ /@types/node@18.11.10:
+ resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==}
+
+ /@types/parse-json@4.0.2:
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+ dev: false
+
+ /@types/prop-types@15.7.11:
+ resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==}
+ dev: false
+
+ /@types/prop-types@15.7.5:
+ resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+
+ /@types/react-transition-group@4.4.9:
+ resolution: {integrity: sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==}
+ dependencies:
+ '@types/react': 18.2.37
+ dev: false
+
+ /@types/react@18.2.37:
+ resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==}
+ dependencies:
+ '@types/prop-types': 15.7.5
+ '@types/scheduler': 0.16.2
+ csstype: 3.1.1
+
+ /@types/scheduler@0.16.2:
+ resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
+
+ /@types/semver@7.5.6:
+ resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
+ dev: true
+
+ /@types/sinonjs__fake-timers@8.1.1:
+ resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
+ dev: false
+
+ /@types/sizzle@2.3.8:
+ resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==}
+ dev: false
+
+ /@types/unist@2.0.6:
+ resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
+ dev: false
+
+ /@types/unist@3.0.2:
+ resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+ dev: false
+
+ /@types/yauzl@2.10.3:
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+ requiresBuild: true
+ dependencies:
+ '@types/node': 18.11.10
+ dev: false
+ optional: true
+
+ /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ '@typescript-eslint/scope-manager': 6.15.0
+ '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ '@typescript-eslint/visitor-keys': 6.15.0
+ debug: 4.3.4(supports-color@8.1.1)
+ eslint: 8.56.0
+ graphemer: 1.4.0
+ ignore: 5.3.0
+ natural-compare: 1.4.0
+ semver: 7.5.4
+ ts-api-utils: 1.0.3(typescript@4.9.3)
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 6.15.0
+ '@typescript-eslint/types': 6.15.0
+ '@typescript-eslint/typescript-estree': 6.15.0(typescript@4.9.3)
+ '@typescript-eslint/visitor-keys': 6.15.0
+ debug: 4.3.4(supports-color@8.1.1)
+ eslint: 8.56.0
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager@6.15.0:
+ resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.15.0
+ '@typescript-eslint/visitor-keys': 6.15.0
+ dev: true
+
+ /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 6.15.0(typescript@4.9.3)
+ '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ debug: 4.3.4(supports-color@8.1.1)
+ eslint: 8.56.0
+ ts-api-utils: 1.0.3(typescript@4.9.3)
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types@6.15.0:
+ resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree@6.15.0(typescript@4.9.3):
+ resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 6.15.0
+ '@typescript-eslint/visitor-keys': 6.15.0
+ debug: 4.3.4(supports-color@8.1.1)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.5.4
+ ts-api-utils: 1.0.3(typescript@4.9.3)
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.6
+ '@typescript-eslint/scope-manager': 6.15.0
+ '@typescript-eslint/types': 6.15.0
+ '@typescript-eslint/typescript-estree': 6.15.0(typescript@4.9.3)
+ eslint: 8.56.0
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys@6.15.0:
+ resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.15.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+ /@zeit/schemas@2.29.0:
+ resolution: {integrity: sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==}
+ dev: true
+
+ /accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+ dev: true
+
+ /acorn-jsx@5.3.2(acorn@8.11.2):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.11.2
+ dev: true
+
+ /acorn-jsx@5.3.2(acorn@8.8.1):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.8.1
+ dev: false
+
+ /acorn@8.11.2:
+ resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /acorn@8.8.1:
+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: false
+
+ /aggregate-error@3.1.0:
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+ dev: false
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /ajv@8.11.0:
+ resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-align@3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
+ dev: false
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ /ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /ansi-sequence-parser@1.1.1:
+ resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==}
+ dev: false
+
+ /ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: false
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+
+ /ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /arch@2.2.0:
+ resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
+
+ /arg@1.0.0:
+ resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==}
+ dev: false
+
+ /arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+ dev: true
+
+ /argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ dependencies:
+ sprintf-js: 1.0.3
+ dev: false
+
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ /aria-query@5.3.0:
+ resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+ dependencies:
+ dequal: 2.0.3
+ dev: true
+
+ /array-buffer-byte-length@1.0.0:
+ resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+ dependencies:
+ call-bind: 1.0.5
+ is-array-buffer: 3.0.2
+ dev: true
+
+ /array-includes@3.1.7:
+ resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ is-string: 1.0.7
+ dev: true
+
+ /array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /array.prototype.findlastindex@1.2.3:
+ resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /array.prototype.flat@1.3.2:
+ resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.flatmap@1.3.2:
+ resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ dev: true
+
+ /array.prototype.tosorted@1.1.2:
+ resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /arraybuffer.prototype.slice@1.0.2:
+ resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.0
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ is-array-buffer: 3.0.2
+ is-shared-array-buffer: 1.0.2
+ dev: true
+
+ /asn1@0.2.6:
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+
+ /assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+ dev: false
+
+ /ast-types-flow@0.0.8:
+ resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ dev: true
+
+ /astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /astring@1.8.3:
+ resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==}
+ hasBin: true
+ dev: false
+
+ /async@3.2.5:
+ resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
+ dev: false
+
+ /asynciterator.prototype@1.0.0:
+ resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /available-typed-arrays@1.0.5:
+ resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /aws-sign2@0.7.0:
+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
+ dev: false
+
+ /aws4@1.12.0:
+ resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
+ dev: false
+
+ /axe-core@4.7.0:
+ resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /axobject-query@3.2.1:
+ resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
+ dependencies:
+ dequal: 2.0.3
+ dev: true
+
+ /babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+ dependencies:
+ '@babel/runtime': 7.23.5
+ cosmiconfig: 7.1.0
+ resolve: 1.22.8
+ dev: false
+
+ /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5):
+ resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/core': 7.23.5
+ '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5):
+ resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5)
+ core-js-compat: 3.33.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5):
+ resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ dependencies:
+ '@babel/core': 7.23.5
+ '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5)
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ /base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ dev: false
+
+ /bcrypt-pbkdf@1.0.2:
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+ dependencies:
+ tweetnacl: 0.14.5
+ dev: false
+
+ /blob-util@2.0.2:
+ resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
+ dev: false
+
+ /bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ dev: false
+
+ /boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: false
+
+ /boxen@7.0.0:
+ resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 7.0.1
+ chalk: 5.3.0
+ cli-boxes: 3.0.0
+ string-width: 5.1.2
+ type-fest: 2.19.0
+ widest-line: 4.0.1
+ wrap-ansi: 8.1.0
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ /braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist@4.22.1:
+ resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001565
+ electron-to-chromium: 1.4.596
+ node-releases: 2.0.13
+ update-browserslist-db: 1.0.13(browserslist@4.22.1)
+ dev: false
+
+ /buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+ dev: false
+
+ /buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
+ /builtin-modules@3.3.0:
+ resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /builtins@5.0.1:
+ resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+ dependencies:
+ semver: 7.5.4
+ dev: true
+
+ /busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
+ dependencies:
+ streamsearch: 1.1.0
+ dev: false
+
+ /bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /cachedir@2.4.0:
+ resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /call-bind@1.0.5:
+ resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+ dependencies:
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.2
+ set-function-length: 1.1.1
+
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ /camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /camelcase@7.0.1:
+ resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /caniuse-lite@1.0.30001565:
+ resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==}
+ dev: false
+
+ /caseless@0.12.0:
+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
+ dev: false
+
+ /ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ dev: false
+
+ /chalk-template@0.4.0:
+ resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==}
+ engines: {node: '>=12'}
+ dependencies:
+ chalk: 4.1.2
+ dev: true
+
+ /chalk@2.3.0:
+ resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 4.5.0
+ dev: false
+
+ /chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: false
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ /chalk@5.0.1:
+ resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
+ /chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ /character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+ dev: false
+
+ /character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ dev: false
+
+ /character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+ dev: false
+
+ /character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+ dev: false
+
+ /check-more-types@2.24.0:
+ resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
+ engines: {node: '>= 0.8.0'}
+ dev: false
+
+ /cheerio-select@2.1.0:
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+ dependencies:
+ boolbase: 1.0.0
+ css-select: 5.1.0
+ css-what: 6.1.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ dev: false
+
+ /cheerio@1.0.0-rc.12:
+ resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
+ engines: {node: '>= 6'}
+ dependencies:
+ cheerio-select: 2.1.0
+ dom-serializer: 2.0.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ htmlparser2: 8.0.2
+ parse5: 7.1.2
+ parse5-htmlparser2-tree-adapter: 7.0.0
+ dev: false
+
+ /ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /clean-stack@2.2.0:
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: false
+
+ /cli-table3@0.6.3:
+ resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
+ engines: {node: 10.* || >= 12.*}
+ dependencies:
+ string-width: 4.2.3
+ optionalDependencies:
+ '@colors/colors': 1.5.0
+ dev: false
+
+ /cli-truncate@2.1.0:
+ resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
+ engines: {node: '>=8'}
+ dependencies:
+ slice-ansi: 3.0.0
+ string-width: 4.2.3
+ dev: false
+
+ /client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ dev: false
+
+ /clipboardy@1.2.2:
+ resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==}
+ engines: {node: '>=4'}
+ dependencies:
+ arch: 2.2.0
+ execa: 0.8.0
+ dev: false
+
+ /clipboardy@3.0.0:
+ resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ arch: 2.2.0
+ execa: 5.1.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /clsx@2.0.0:
+ resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: false
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+
+ /color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: false
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ /colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: false
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ dev: false
+
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ dev: false
+
+ /commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /commander@6.2.1:
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: false
+
+ /commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+ dev: false
+
+ /common-tags@1.8.2:
+ resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
+ engines: {node: '>=4.0.0'}
+ dev: false
+
+ /compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /compute-scroll-into-view@2.0.4:
+ resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==}
+ dev: false
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ /content-disposition@0.5.2:
+ resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: false
+
+ /convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ dev: false
+
+ /core-js-compat@3.33.3:
+ resolution: {integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==}
+ dependencies:
+ browserslist: 4.22.1
+ dev: false
+
+ /core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+ dev: false
+
+ /cose-base@1.0.3:
+ resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
+ dependencies:
+ layout-base: 1.0.2
+ dev: false
+
+ /cose-base@2.2.0:
+ resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
+ dependencies:
+ layout-base: 2.0.1
+ dev: false
+
+ /cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+ dev: false
+
+ /cosmiconfig@8.3.6(typescript@4.9.3):
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ typescript: 4.9.3
+ dev: false
+
+ /cross-spawn@5.1.0:
+ resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
+ dependencies:
+ lru-cache: 4.1.5
+ shebang-command: 1.2.0
+ which: 1.3.1
+ dev: false
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ /css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+ dev: false
+
+ /css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.0.2
+ dev: false
+
+ /css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.0.2
+ dev: false
+
+ /css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ dependencies:
+ css-tree: 2.2.1
+ dev: false
+
+ /csstype@3.1.1:
+ resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
+
+ /csstype@3.1.2:
+ resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+ dev: false
+
+ /cypress@13.6.3:
+ resolution: {integrity: sha512-d/pZvgwjAyZsoyJ3FOsJT5lDsqnxQ/clMqnNc++rkHjbkkiF2h9s0JsZSyyH4QXhVFW3zPFg82jD25roFLOdZA==}
+ engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@cypress/request': 3.0.1
+ '@cypress/xvfb': 1.2.4(supports-color@8.1.1)
+ '@types/sinonjs__fake-timers': 8.1.1
+ '@types/sizzle': 2.3.8
+ arch: 2.2.0
+ blob-util: 2.0.2
+ bluebird: 3.7.2
+ buffer: 5.7.1
+ cachedir: 2.4.0
+ chalk: 4.1.2
+ check-more-types: 2.24.0
+ cli-cursor: 3.1.0
+ cli-table3: 0.6.3
+ commander: 6.2.1
+ common-tags: 1.8.2
+ dayjs: 1.11.10
+ debug: 4.3.4(supports-color@8.1.1)
+ enquirer: 2.4.1
+ eventemitter2: 6.4.7
+ execa: 4.1.0
+ executable: 4.1.1
+ extract-zip: 2.0.1(supports-color@8.1.1)
+ figures: 3.2.0
+ fs-extra: 9.1.0
+ getos: 3.2.1
+ is-ci: 3.0.1
+ is-installed-globally: 0.4.0
+ lazy-ass: 1.6.0
+ listr2: 3.14.0(enquirer@2.4.1)
+ lodash: 4.17.21
+ log-symbols: 4.1.0
+ minimist: 1.2.8
+ ospath: 1.2.2
+ pretty-bytes: 5.6.0
+ process: 0.11.10
+ proxy-from-env: 1.0.0
+ request-progress: 3.0.0
+ semver: 7.5.4
+ supports-color: 8.1.1
+ tmp: 0.2.1
+ untildify: 4.0.0
+ yauzl: 2.10.0
+ dev: false
+
+ /cytoscape-cose-bilkent@4.1.0(cytoscape@3.27.0):
+ resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
+ dependencies:
+ cose-base: 1.0.3
+ cytoscape: 3.27.0
+ dev: false
+
+ /cytoscape-fcose@2.2.0(cytoscape@3.27.0):
+ resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
+ peerDependencies:
+ cytoscape: ^3.2.0
+ dependencies:
+ cose-base: 2.2.0
+ cytoscape: 3.27.0
+ dev: false
+
+ /cytoscape@3.27.0:
+ resolution: {integrity: sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ heap: 0.2.7
+ lodash: 4.17.21
+ dev: false
+
+ /d3-array@2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
+ dependencies:
+ internmap: 1.0.1
+ dev: false
+
+ /d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
+ dependencies:
+ internmap: 2.0.3
+ dev: false
+
+ /d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ dev: false
+
+ /d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-path: 3.1.0
+ dev: false
+
+ /d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
+ dependencies:
+ delaunator: 5.0.0
+ dev: false
+
+ /d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
+ dev: false
+
+ /d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dependencies:
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
+ dev: false
+
+ /d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dsv: 3.0.1
+ dev: false
+
+ /d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
+ dev: false
+
+ /d3-format@3.1.0:
+ resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-geo@3.1.0:
+ resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-color: 3.1.0
+ dev: false
+
+ /d3-path@1.0.9:
+ resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
+ dev: false
+
+ /d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-sankey@0.12.3:
+ resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
+ dependencies:
+ d3-array: 2.12.1
+ d3-shape: 1.3.7
+ dev: false
+
+ /d3-scale-chromatic@3.0.0:
+ resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
+ dev: false
+
+ /d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ d3-format: 3.1.0
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ dev: false
+
+ /d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-shape@1.3.7:
+ resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
+ dependencies:
+ d3-path: 1.0.9
+ dev: false
+
+ /d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-path: 3.1.0
+ dev: false
+
+ /d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-time: 3.1.0
+ dev: false
+
+ /d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-transition@3.0.1(d3-selection@3.0.0):
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+ dev: false
+
+ /d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ dev: false
+
+ /d3@7.8.5:
+ resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.0
+ d3-geo: 3.1.0
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.0.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ d3-zoom: 3.0.0
+ dev: false
+
+ /dagre-d3-es@7.0.10:
+ resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==}
+ dependencies:
+ d3: 7.8.5
+ lodash-es: 4.17.21
+ dev: false
+
+ /damerau-levenshtein@1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ dev: true
+
+ /dashdash@1.14.1:
+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ assert-plus: 1.0.0
+ dev: false
+
+ /data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+ dev: false
+
+ /dayjs@1.11.10:
+ resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
+ dev: false
+
+ /debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@3.2.7(supports-color@8.1.1):
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ supports-color: 8.1.1
+
+ /debug@4.3.4(supports-color@8.1.1):
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ supports-color: 8.1.1
+
+ /decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+ dependencies:
+ character-entities: 2.0.2
+ dev: false
+
+ /deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
+ /deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
+ /deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /define-data-property@1.1.1:
+ resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+
+ /define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ has-property-descriptors: 1.0.1
+ object-keys: 1.1.1
+ dev: true
+
+ /delaunator@5.0.0:
+ resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==}
+ dependencies:
+ robust-predicates: 3.0.2
+ dev: false
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ /devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dependencies:
+ dequal: 2.0.3
+ dev: false
+
+ /diff@5.1.0:
+ resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
+ engines: {node: '>=0.3.1'}
+ dev: false
+
+ /dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /dom-helpers@5.2.1:
+ resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dependencies:
+ '@babel/runtime': 7.23.5
+ csstype: 3.1.2
+ dev: false
+
+ /dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: false
+
+ /domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: false
+
+ /domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: false
+
+ /dompurify@3.0.6:
+ resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==}
+ dev: false
+
+ /domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: false
+
+ /dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.4.1
+ dev: false
+
+ /eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ dev: true
+
+ /ecc-jsbn@0.1.2:
+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ dev: false
+
+ /electron-to-chromium@1.4.596:
+ resolution: {integrity: sha512-zW3zbZ40Icb2BCWjm47nxwcFGYlIgdXkAx85XDO7cyky9J4QQfq8t0W19/TLZqq3JPQXtlv8BPIGmfa9Jb4scg==}
+ dev: false
+
+ /elkjs@0.8.2:
+ resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==}
+ dev: false
+
+ /emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ /emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ dev: true
+
+ /end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ dependencies:
+ once: 1.4.0
+ dev: false
+
+ /enhanced-resolve@5.15.0:
+ resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+ dev: true
+
+ /enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+ dev: false
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: false
+
+ /env-cmd@10.1.0:
+ resolution: {integrity: sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+ dependencies:
+ commander: 4.1.1
+ cross-spawn: 7.0.3
+ dev: true
+
+ /error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: false
+
+ /es-abstract@1.22.3:
+ resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.0
+ arraybuffer.prototype.slice: 1.0.2
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ es-set-tostringtag: 2.0.2
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.2
+ get-symbol-description: 1.0.0
+ globalthis: 1.0.3
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ hasown: 2.0.0
+ internal-slot: 1.0.6
+ is-array-buffer: 3.0.2
+ is-callable: 1.2.7
+ is-negative-zero: 2.0.2
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.2
+ is-string: 1.0.7
+ is-typed-array: 1.1.12
+ 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.1
+ safe-array-concat: 1.0.1
+ safe-regex-test: 1.0.0
+ string.prototype.trim: 1.2.8
+ string.prototype.trimend: 1.0.7
+ string.prototype.trimstart: 1.0.7
+ typed-array-buffer: 1.0.0
+ typed-array-byte-length: 1.0.0
+ typed-array-byte-offset: 1.0.0
+ typed-array-length: 1.0.4
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.13
+ dev: true
+
+ /es-iterator-helpers@1.0.15:
+ resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
+ dependencies:
+ asynciterator.prototype: 1.0.0
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ es-set-tostringtag: 2.0.2
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.2
+ globalthis: 1.0.3
+ has-property-descriptors: 1.0.1
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ internal-slot: 1.0.6
+ iterator.prototype: 1.1.2
+ safe-array-concat: 1.0.1
+ dev: true
+
+ /es-set-tostringtag@2.0.2:
+ resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ has-tostringtag: 1.0.0
+ hasown: 2.0.0
+ dev: true
+
+ /es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+ dev: true
+
+ /escalade@3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+ dev: false
+
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ /escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /eslint-compat-utils@0.1.2(eslint@8.56.0):
+ resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==}
+ peerDependencies:
+ eslint: ^7.23.0 || ^8.0.0
+ typescript: '>=3.3.1'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@next/eslint-plugin-next': 14.0.4
+ '@rushstack/eslint-patch': 1.6.1
+ '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ eslint: 8.56.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0)
+ eslint-plugin-react: 7.33.2(eslint@8.56.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0)
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-config-standard-jsx@11.0.0(eslint-plugin-react@7.33.2)(eslint@8.56.0):
+ resolution: {integrity: sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==}
+ peerDependencies:
+ eslint: ^8.8.0
+ eslint-plugin-react: ^7.28.0
+ dependencies:
+ eslint: 8.56.0
+ eslint-plugin-react: 7.33.2(eslint@8.56.0)
+ dev: true
+
+ /eslint-config-standard-with-typescript@43.0.0(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@4.9.3):
+ resolution: {integrity: sha512-AT0qK01M5bmsWiE3UZvaQO5da1y1n6uQckAKqGNe6zPW5IOzgMLXZxw77nnFm+C11nxAZXsCPrbsgJhSrGfX6Q==}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': ^6.4.0
+ eslint: ^8.0.1
+ eslint-plugin-import: ^2.25.2
+ eslint-plugin-n: '^15.0.0 || ^16.0.0 '
+ eslint-plugin-promise: ^6.0.0
+ typescript: '*'
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@4.9.3)
+ '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ eslint: 8.56.0
+ eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-n: 16.5.0(eslint@8.56.0)
+ eslint-plugin-promise: 6.1.1(eslint@8.56.0)
+ typescript: 4.9.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0):
+ resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ eslint: ^8.0.1
+ eslint-plugin-import: ^2.25.2
+ eslint-plugin-n: '^15.0.0 || ^16.0.0 '
+ eslint-plugin-promise: ^6.0.0
+ dependencies:
+ eslint: 8.56.0
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-n: 16.5.0(eslint@8.56.0)
+ eslint-plugin-promise: 6.1.1(eslint@8.56.0)
+ dev: true
+
+ /eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ dependencies:
+ debug: 3.2.7(supports-color@8.1.1)
+ is-core-module: 2.13.1
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0):
+ resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+ dependencies:
+ debug: 4.3.4(supports-color@8.1.1)
+ enhanced-resolve: 5.15.0
+ eslint: 8.56.0
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ fast-glob: 3.3.2
+ get-tsconfig: 4.7.2
+ is-core-module: 2.13.1
+ is-glob: 4.0.3
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-node
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0):
+ resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ debug: 3.2.7(supports-color@8.1.1)
+ eslint: 8.56.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-es-x@7.5.0(eslint@8.56.0):
+ resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=8'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@eslint-community/regexpp': 4.10.0
+ eslint: 8.56.0
+ eslint-compat-utils: 0.1.2(eslint@8.56.0)
+ dev: true
+
+ /eslint-plugin-es@3.0.1(eslint@8.56.0):
+ resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==}
+ engines: {node: '>=8.10.0'}
+ peerDependencies:
+ eslint: '>=4.19.1'
+ dependencies:
+ eslint: 8.56.0
+ eslint-utils: 2.1.0
+ regexpp: 3.2.0
+ dev: true
+
+ /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0):
+ resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@4.9.3)
+ array-includes: 3.1.7
+ array.prototype.findlastindex: 1.2.3
+ array.prototype.flat: 1.3.2
+ array.prototype.flatmap: 1.3.2
+ debug: 3.2.7(supports-color@8.1.1)
+ doctrine: 2.1.0
+ eslint: 8.56.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
+ hasown: 2.0.0
+ is-core-module: 2.13.1
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.fromentries: 2.0.7
+ object.groupby: 1.0.1
+ object.values: 1.1.7
+ semver: 6.3.1
+ tsconfig-paths: 3.15.0
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0):
+ resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ '@babel/runtime': 7.23.5
+ aria-query: 5.3.0
+ array-includes: 3.1.7
+ array.prototype.flatmap: 1.3.2
+ ast-types-flow: 0.0.8
+ axe-core: 4.7.0
+ axobject-query: 3.2.1
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ es-iterator-helpers: 1.0.15
+ eslint: 8.56.0
+ hasown: 2.0.0
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 3.1.2
+ object.entries: 1.1.7
+ object.fromentries: 2.0.7
+ dev: true
+
+ /eslint-plugin-n@16.5.0(eslint@8.56.0):
+ resolution: {integrity: sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ builtins: 5.0.1
+ eslint: 8.56.0
+ eslint-plugin-es-x: 7.5.0(eslint@8.56.0)
+ get-tsconfig: 4.7.2
+ ignore: 5.3.0
+ is-builtin-module: 3.2.1
+ is-core-module: 2.13.1
+ minimatch: 3.1.2
+ resolve: 1.22.8
+ semver: 7.5.4
+ dev: true
+
+ /eslint-plugin-node@11.1.0(eslint@8.56.0):
+ resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==}
+ engines: {node: '>=8.10.0'}
+ peerDependencies:
+ eslint: '>=5.16.0'
+ dependencies:
+ eslint: 8.56.0
+ eslint-plugin-es: 3.0.1(eslint@8.56.0)
+ eslint-utils: 2.1.0
+ ignore: 5.3.0
+ minimatch: 3.1.2
+ resolve: 1.22.8
+ semver: 6.3.1
+ dev: true
+
+ /eslint-plugin-promise@6.1.1(eslint@8.56.0):
+ resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0):
+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-plugin-react@7.33.2(eslint@8.56.0):
+ resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ dependencies:
+ array-includes: 3.1.7
+ array.prototype.flatmap: 1.3.2
+ array.prototype.tosorted: 1.1.2
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.0.15
+ eslint: 8.56.0
+ estraverse: 5.3.0
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.7
+ object.fromentries: 2.0.7
+ object.hasown: 1.1.3
+ object.values: 1.1.7
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.10
+ dev: true
+
+ /eslint-plugin-security@2.1.0:
+ resolution: {integrity: sha512-ywxclP954bf8d3gr6KOQ/AFc+PRvWuhOxtPOEtiHmVYiZr/mcgQtmSJq6+hTEXC5ylTjHnPPG+PEnzlDiWMXbQ==}
+ dependencies:
+ safe-regex: 2.1.1
+ dev: true
+
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-utils@2.1.0:
+ resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
+ engines: {node: '>=6'}
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+ dev: true
+
+ /eslint-visitor-keys@1.3.0:
+ resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint@8.56.0:
+ resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.56.0
+ '@humanwhocodes/config-array': 0.11.13
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4(supports-color@8.1.1)
+ 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.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ 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
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: false
+
+ /esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-util-attach-comments@2.1.0:
+ resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==}
+ dependencies:
+ '@types/estree': 1.0.0
+ dev: false
+
+ /estree-util-build-jsx@2.2.0:
+ resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ estree-util-is-identifier-name: 2.0.1
+ estree-walker: 3.0.1
+ dev: false
+
+ /estree-util-is-identifier-name@2.0.1:
+ resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==}
+ dev: false
+
+ /estree-util-to-js@1.1.0:
+ resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ astring: 1.8.3
+ source-map: 0.7.4
+ dev: false
+
+ /estree-util-value-to-estree@1.3.0:
+ resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ is-plain-obj: 3.0.0
+ dev: false
+
+ /estree-util-visit@1.2.0:
+ resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ '@types/unist': 2.0.6
+ dev: false
+
+ /estree-walker@3.0.1:
+ resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==}
+ dev: false
+
+ /esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ /eventemitter2@6.4.7:
+ resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
+ dev: false
+
+ /execa@0.8.0:
+ resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==}
+ engines: {node: '>=4'}
+ dependencies:
+ cross-spawn: 5.1.0
+ get-stream: 3.0.0
+ is-stream: 1.1.0
+ npm-run-path: 2.0.2
+ p-finally: 1.0.0
+ signal-exit: 3.0.7
+ strip-eof: 1.0.0
+ dev: false
+
+ /execa@4.1.0:
+ resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 5.2.0
+ human-signals: 1.1.1
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: false
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /executable@4.1.1:
+ resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
+ engines: {node: '>=4'}
+ dependencies:
+ pify: 2.3.0
+ dev: false
+
+ /extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extendable: 0.1.1
+ dev: false
+
+ /extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ dev: false
+
+ /extract-zip@2.0.1(supports-color@8.1.1):
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+ dependencies:
+ debug: 4.3.4(supports-color@8.1.1)
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /extsprintf@1.3.0:
+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
+ engines: {'0': node >=0.6.0}
+ dev: false
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fast-url-parser@1.1.3:
+ resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==}
+ dependencies:
+ punycode: 1.4.1
+ dev: true
+
+ /fastq@1.16.0:
+ resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==}
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+ dependencies:
+ pend: 1.2.0
+ dev: false
+
+ /fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.2.1
+ dev: false
+
+ /figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: false
+
+ /file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.2.0
+ dev: true
+
+ /fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+ dev: false
+
+ /find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.2.9
+ keyv: 4.5.4
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted@3.2.9:
+ resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+ dev: true
+
+ /flexsearch@0.7.31:
+ resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==}
+ dev: false
+
+ /focus-visible@5.2.0:
+ resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==}
+ dev: false
+
+ /for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.7
+ dev: true
+
+ /forever-agent@0.6.1:
+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
+ dev: false
+
+ /form-data@2.3.3:
+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ engines: {node: '>= 0.12'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+ dependencies:
+ fetch-blob: 3.2.0
+ dev: false
+
+ /fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: false
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ /function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ functions-have-names: 1.2.3
+ dev: true
+
+ /functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: true
+
+ /fuse.js@7.0.0:
+ resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /get-intrinsic@1.2.2:
+ resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+ dependencies:
+ function-bind: 1.1.2
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ hasown: 2.0.0
+
+ /get-stream@3.0.0:
+ resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+ dependencies:
+ pump: 3.0.0
+ dev: false
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /get-symbol-description@1.0.0:
+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /get-tsconfig@4.7.2:
+ resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+ dev: true
+
+ /getos@3.2.1:
+ resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
+ dependencies:
+ async: 3.2.5
+ dev: false
+
+ /getpass@0.1.7:
+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
+ dependencies:
+ assert-plus: 1.0.0
+ dev: false
+
+ /git-up@7.0.0:
+ resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
+ dependencies:
+ is-ssh: 1.4.0
+ parse-url: 8.1.0
+ dev: false
+
+ /git-url-parse@13.1.0:
+ resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==}
+ dependencies:
+ git-up: 7.0.0
+ dev: false
+
+ /github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+ dev: false
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+ dev: false
+
+ /glob@7.1.7:
+ resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ /global-dirs@3.0.1:
+ resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ini: 2.0.0
+ dev: false
+
+ /globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globalthis@1.0.3:
+ resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-properties: 1.2.1
+ dev: true
+
+ /globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.0
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.2
+
+ /graceful-fs@4.2.10:
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+ dev: false
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ dev: true
+
+ /gray-matter@4.0.3:
+ resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+ engines: {node: '>=6.0'}
+ dependencies:
+ js-yaml: 3.14.1
+ kind-of: 6.0.3
+ section-matter: 1.0.0
+ strip-bom-string: 1.0.0
+ dev: false
+
+ /has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: true
+
+ /has-flag@2.0.0:
+ resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ /has-property-descriptors@1.0.1:
+ resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+ dependencies:
+ get-intrinsic: 1.2.2
+
+ /has-proto@1.0.1:
+ resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+ engines: {node: '>= 0.4'}
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+
+ /has-tostringtag@1.0.0:
+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /hash-obj@4.0.0:
+ resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==}
+ engines: {node: '>=12'}
+ dependencies:
+ is-obj: 3.0.0
+ sort-keys: 5.0.0
+ type-fest: 1.4.0
+ dev: false
+
+ /hasown@2.0.0:
+ resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /hast-util-from-dom@5.0.0:
+ resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==}
+ dependencies:
+ '@types/hast': 3.0.3
+ hastscript: 8.0.0
+ web-namespaces: 2.0.1
+ dev: false
+
+ /hast-util-from-html-isomorphic@2.0.0:
+ resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ hast-util-from-dom: 5.0.0
+ hast-util-from-html: 2.0.1
+ unist-util-remove-position: 5.0.0
+ dev: false
+
+ /hast-util-from-html@2.0.1:
+ resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==}
+ dependencies:
+ '@types/hast': 3.0.3
+ devlop: 1.1.0
+ hast-util-from-parse5: 8.0.1
+ parse5: 7.1.2
+ vfile: 6.0.1
+ vfile-message: 4.0.2
+ dev: false
+
+ /hast-util-from-parse5@8.0.1:
+ resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ devlop: 1.1.0
+ hastscript: 8.0.0
+ property-information: 6.2.0
+ vfile: 6.0.1
+ vfile-location: 5.0.2
+ web-namespaces: 2.0.1
+ dev: false
+
+ /hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ dependencies:
+ '@types/hast': 3.0.3
+ dev: false
+
+ /hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+ dependencies:
+ '@types/hast': 3.0.3
+ dev: false
+
+ /hast-util-raw@9.0.1:
+ resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ '@ungap/structured-clone': 1.2.0
+ hast-util-from-parse5: 8.0.1
+ hast-util-to-parse5: 8.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.0.2
+ parse5: 7.1.2
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: false
+
+ /hast-util-to-estree@2.1.0:
+ resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==}
+ dependencies:
+ '@types/estree': 1.0.0
+ '@types/estree-jsx': 1.0.0
+ '@types/hast': 2.3.4
+ '@types/unist': 2.0.6
+ comma-separated-tokens: 2.0.3
+ estree-util-attach-comments: 2.1.0
+ estree-util-is-identifier-name: 2.0.1
+ hast-util-whitespace: 2.0.0
+ mdast-util-mdx-expression: 1.3.1
+ mdast-util-mdxjs-esm: 1.3.0
+ property-information: 6.2.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.3.0
+ unist-util-position: 4.0.3
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /hast-util-to-parse5@8.0.0:
+ resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ property-information: 6.2.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: false
+
+ /hast-util-to-text@4.0.0:
+ resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ hast-util-is-element: 3.0.0
+ unist-util-find-after: 5.0.0
+ dev: false
+
+ /hast-util-whitespace@2.0.0:
+ resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==}
+ dev: false
+
+ /hastscript@8.0.0:
+ resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 6.2.0
+ space-separated-tokens: 2.0.2
+ dev: false
+
+ /heap@0.2.7:
+ resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
+ dev: false
+
+ /hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+ dependencies:
+ react-is: 16.13.1
+ dev: false
+
+ /html-link-extractor@1.0.5:
+ resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==}
+ dependencies:
+ cheerio: 1.0.0-rc.12
+ dev: false
+
+ /html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+ dev: false
+
+ /htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+ dev: false
+
+ /http-signature@1.3.6:
+ resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 2.0.2
+ sshpk: 1.18.0
+ dev: false
+
+ /human-signals@1.1.1:
+ resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
+ engines: {node: '>=8.12.0'}
+ dev: false
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /husky@8.0.3:
+ resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+
+ /ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ dev: false
+
+ /ignore@5.3.0:
+ resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
+ /ini@2.0.0:
+ resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+ dev: false
+
+ /internal-slot@1.0.6:
+ resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.2
+ hasown: 2.0.0
+ side-channel: 1.0.4
+ dev: true
+
+ /internmap@1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
+ dev: false
+
+ /internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /interpret@1.4.0:
+ resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
+ engines: {node: '>= 0.10'}
+ dev: false
+
+ /intersection-observer@0.12.2:
+ resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
+ dev: false
+
+ /is-absolute-url@4.0.1:
+ resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: false
+
+ /is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+ dev: false
+
+ /is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+ dev: false
+
+ /is-array-buffer@3.0.2:
+ resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-typed-array: 1.1.12
+ dev: true
+
+ /is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: false
+
+ /is-async-function@2.0.0:
+ resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+ dev: true
+
+ /is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /is-builtin-module@3.2.1:
+ resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
+ engines: {node: '>=6'}
+ dependencies:
+ builtin-modules: 3.3.0
+ dev: true
+
+ /is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-ci@3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+ dependencies:
+ ci-info: 3.9.0
+ dev: false
+
+ /is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+ dependencies:
+ hasown: 2.0.0
+
+ /is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+ dev: false
+
+ /is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-finalizationregistry@1.0.2:
+ resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ /is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ dev: false
+
+ /is-installed-globally@0.4.0:
+ resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ global-dirs: 3.0.1
+ is-path-inside: 3.0.3
+ dev: false
+
+ /is-map@2.0.2:
+ resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+ dev: true
+
+ /is-negative-zero@2.0.2:
+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-obj@3.0.0:
+ resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+
+ /is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /is-port-reachable@4.0.0:
+ resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /is-reference@3.0.0:
+ resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==}
+ dependencies:
+ '@types/estree': 1.0.0
+ dev: false
+
+ /is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-relative-url@4.0.0:
+ resolution: {integrity: sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ is-absolute-url: 4.0.1
+ dev: false
+
+ /is-set@2.0.2:
+ resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+ dev: true
+
+ /is-shared-array-buffer@1.0.2:
+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-ssh@1.4.0:
+ resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
+ dependencies:
+ protocols: 2.0.1
+ dev: false
+
+ /is-stream@1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ /is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /is-typed-array@1.1.12:
+ resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ which-typed-array: 1.1.13
+ dev: true
+
+ /is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+ dev: false
+
+ /is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /is-weakmap@2.0.1:
+ resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+ dev: true
+
+ /is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.5
+ dev: true
+
+ /is-weakset@2.0.2:
+ resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ dev: true
+
+ /isemail@3.2.0:
+ resolution: {integrity: sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ punycode: 2.3.1
+ dev: false
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ /isstream@0.1.2:
+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
+ dev: false
+
+ /iterator.prototype@1.1.2:
+ resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+ dependencies:
+ define-properties: 1.2.1
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ reflect.getprototypeof: 1.0.4
+ set-function-name: 2.0.1
+ dev: true
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ /js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+ dev: false
+
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+
+ /jsbn@0.1.1:
+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
+ dev: false
+
+ /jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+ dev: false
+
+ /jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: false
+
+ /json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: false
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+ dev: false
+
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+ dev: false
+
+ /json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+
+ /json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: false
+
+ /jsonc-parser@3.2.0:
+ resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+ dev: false
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /jsprim@2.0.2:
+ resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
+ engines: {'0': node >=0.6.0}
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.4.0
+ verror: 1.10.0
+ dev: false
+
+ /jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ array-includes: 3.1.7
+ array.prototype.flat: 1.3.2
+ object.assign: 4.1.5
+ object.values: 1.1.7
+ dev: true
+
+ /katex@0.13.24:
+ resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==}
+ hasBin: true
+ dependencies:
+ commander: 8.3.0
+ dev: false
+
+ /katex@0.16.9:
+ resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==}
+ hasBin: true
+ dependencies:
+ commander: 8.3.0
+ dev: false
+
+ /keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
+
+ /khroma@2.1.0:
+ resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+ dev: false
+
+ /kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /language-subtag-registry@0.3.22:
+ resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
+ dev: true
+
+ /language-tags@1.0.9:
+ resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ language-subtag-registry: 0.3.22
+ dev: true
+
+ /layout-base@1.0.2:
+ resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
+ dev: false
+
+ /layout-base@2.0.1:
+ resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
+ dev: false
+
+ /lazy-ass@1.6.0:
+ resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==}
+ engines: {node: '> 0.8'}
+ dev: false
+
+ /levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ dev: false
+
+ /link-check@5.2.0:
+ resolution: {integrity: sha512-xRbhYLaGDw7eRDTibTAcl6fXtmUQ13vkezQiTqshHHdGueQeumgxxmQMIOmJYsh2p8BF08t8thhDQ++EAOOq3w==}
+ dependencies:
+ is-relative-url: 4.0.0
+ isemail: 3.2.0
+ ms: 2.1.3
+ needle: 3.3.1
+ dev: false
+
+ /listr2@3.14.0(enquirer@2.4.1):
+ resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ enquirer: '>= 2.3.0 < 3'
+ peerDependenciesMeta:
+ enquirer:
+ optional: true
+ dependencies:
+ cli-truncate: 2.1.0
+ colorette: 2.0.20
+ enquirer: 2.4.1
+ log-update: 4.0.0
+ p-map: 4.0.0
+ rfdc: 1.3.1
+ rxjs: 7.8.1
+ through: 2.3.8
+ wrap-ansi: 7.0.0
+ dev: false
+
+ /locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
+ /lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ dev: false
+
+ /lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+ dev: false
+
+ /lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ dev: false
+
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /lodash.once@4.1.1:
+ resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
+ dev: false
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: false
+
+ /log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+ dev: false
+
+ /log-update@4.0.0:
+ resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-escapes: 4.3.2
+ cli-cursor: 3.1.0
+ slice-ansi: 4.0.0
+ wrap-ansi: 6.2.0
+ dev: false
+
+ /longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ dev: false
+
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+
+ /lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+ dependencies:
+ tslib: 2.4.1
+ dev: false
+
+ /lru-cache@4.1.5:
+ resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
+ dependencies:
+ pseudomap: 1.0.2
+ yallist: 2.1.2
+ dev: false
+
+ /lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: false
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+
+ /markdown-extensions@1.1.1:
+ resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /markdown-link-check@3.11.2:
+ resolution: {integrity: sha512-zave+vI4AMeLp0FlUllAwGbNytSKsS3R2Zgtf3ufVT892Z/L6Ro9osZwE9PNA7s0IkJ4onnuHqatpsaCiAShJw==}
+ hasBin: true
+ dependencies:
+ async: 3.2.5
+ chalk: 5.3.0
+ commander: 10.0.1
+ link-check: 5.2.0
+ lodash: 4.17.21
+ markdown-link-extractor: 3.1.0
+ needle: 3.3.1
+ progress: 2.0.3
+ dev: false
+
+ /markdown-link-extractor@3.1.0:
+ resolution: {integrity: sha512-r0NEbP1dsM+IqB62Ru9TXLP/HDaTdBNIeylYXumuBi6Xv4ufjE1/g3TnslYL8VNqNcGAGbMptQFHrrdfoZ/Sug==}
+ dependencies:
+ html-link-extractor: 1.0.5
+ marked: 4.3.0
+ dev: false
+
+ /markdown-table@3.0.3:
+ resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+ dev: false
+
+ /marked@4.3.0:
+ resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==}
+ engines: {node: '>= 12'}
+ hasBin: true
+ dev: false
+
+ /match-sorter@6.3.1:
+ resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==}
+ dependencies:
+ '@babel/runtime': 7.23.5
+ remove-accents: 0.4.2
+ dev: false
+
+ /mdast-util-definitions@5.1.1:
+ resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ '@types/unist': 2.0.6
+ unist-util-visit: 4.1.1
+ dev: false
+
+ /mdast-util-find-and-replace@2.2.1:
+ resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==}
+ dependencies:
+ escape-string-regexp: 5.0.0
+ unist-util-is: 5.1.1
+ unist-util-visit-parents: 5.1.1
+ dev: false
+
+ /mdast-util-from-markdown@1.2.0:
+ resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ '@types/unist': 2.0.6
+ decode-named-character-reference: 1.0.2
+ mdast-util-to-string: 3.1.0
+ micromark: 3.1.0
+ micromark-util-decode-numeric-character-reference: 1.0.0
+ micromark-util-decode-string: 1.0.2
+ micromark-util-normalize-identifier: 1.0.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ unist-util-stringify-position: 3.0.2
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ '@types/unist': 2.0.6
+ decode-named-character-reference: 1.0.2
+ mdast-util-to-string: 3.1.0
+ micromark: 3.1.0
+ micromark-util-decode-numeric-character-reference: 1.0.0
+ micromark-util-decode-string: 1.0.2
+ micromark-util-normalize-identifier: 1.0.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ unist-util-stringify-position: 3.0.2
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-autolink-literal@1.0.2:
+ resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ ccount: 2.0.1
+ mdast-util-find-and-replace: 2.2.1
+ micromark-util-character: 1.1.0
+ dev: false
+
+ /mdast-util-gfm-footnote@1.0.1:
+ resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-to-markdown: 1.3.0
+ micromark-util-normalize-identifier: 1.0.0
+ dev: false
+
+ /mdast-util-gfm-strikethrough@1.0.2:
+ resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-to-markdown: 1.3.0
+ dev: false
+
+ /mdast-util-gfm-table@1.0.6:
+ resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ markdown-table: 3.0.3
+ mdast-util-from-markdown: 1.2.0
+ mdast-util-to-markdown: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-gfm-task-list-item@1.0.1:
+ resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-to-markdown: 1.3.0
+ dev: false
+
+ /mdast-util-gfm@2.0.1:
+ resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==}
+ dependencies:
+ mdast-util-from-markdown: 1.2.0
+ mdast-util-gfm-autolink-literal: 1.0.2
+ mdast-util-gfm-footnote: 1.0.1
+ mdast-util-gfm-strikethrough: 1.0.2
+ mdast-util-gfm-table: 1.0.6
+ mdast-util-gfm-task-list-item: 1.0.1
+ mdast-util-to-markdown: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-math@2.0.2:
+ resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ longest-streak: 3.1.0
+ mdast-util-to-markdown: 1.3.0
+ dev: false
+
+ /mdast-util-mdx-expression@1.3.1:
+ resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ mdast-util-from-markdown: 1.2.0
+ mdast-util-to-markdown: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdx-jsx@2.1.0:
+ resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ ccount: 2.0.1
+ mdast-util-to-markdown: 1.3.0
+ parse-entities: 4.0.0
+ stringify-entities: 4.0.3
+ unist-util-remove-position: 4.0.1
+ unist-util-stringify-position: 3.0.2
+ vfile-message: 3.1.3
+ dev: false
+
+ /mdast-util-mdx@2.0.0:
+ resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==}
+ dependencies:
+ mdast-util-mdx-expression: 1.3.1
+ mdast-util-mdx-jsx: 2.1.0
+ mdast-util-mdxjs-esm: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdxjs-esm@1.3.0:
+ resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==}
+ dependencies:
+ '@types/estree-jsx': 1.0.0
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ mdast-util-from-markdown: 1.2.0
+ mdast-util-to-markdown: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-to-hast@12.2.4:
+ resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==}
+ dependencies:
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ mdast-util-definitions: 5.1.1
+ micromark-util-sanitize-uri: 1.1.0
+ trim-lines: 3.0.1
+ unist-builder: 3.0.0
+ unist-util-generated: 2.0.0
+ unist-util-position: 4.0.3
+ unist-util-visit: 4.1.1
+ dev: false
+
+ /mdast-util-to-hast@13.0.2:
+ resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/mdast': 4.0.3
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /mdast-util-to-markdown@1.3.0:
+ resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ '@types/unist': 2.0.6
+ longest-streak: 3.1.0
+ mdast-util-to-string: 3.1.0
+ micromark-util-decode-string: 1.0.2
+ unist-util-visit: 4.1.1
+ zwitch: 2.0.4
+ dev: false
+
+ /mdast-util-to-string@3.1.0:
+ resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==}
+ dev: false
+
+ /mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+ dev: false
+
+ /mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+ dev: false
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ /merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /mermaid@10.6.1:
+ resolution: {integrity: sha512-Hky0/RpOw/1il9X8AvzOEChfJtVvmXm+y7JML5C//ePYMy0/9jCEmW1E1g86x9oDfW9+iVEdTV/i+M6KWRNs4A==}
+ dependencies:
+ '@braintree/sanitize-url': 6.0.4
+ '@types/d3-scale': 4.0.8
+ '@types/d3-scale-chromatic': 3.0.3
+ cytoscape: 3.27.0
+ cytoscape-cose-bilkent: 4.1.0(cytoscape@3.27.0)
+ cytoscape-fcose: 2.2.0(cytoscape@3.27.0)
+ d3: 7.8.5
+ d3-sankey: 0.12.3
+ dagre-d3-es: 7.0.10
+ dayjs: 1.11.10
+ dompurify: 3.0.6
+ elkjs: 0.8.2
+ khroma: 2.1.0
+ lodash-es: 4.17.21
+ mdast-util-from-markdown: 1.3.1
+ non-layered-tidy-tree-layout: 2.0.2
+ stylis: 4.2.0
+ ts-dedent: 2.2.0
+ uuid: 9.0.1
+ web-worker: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /micromark-core-commonmark@1.0.6:
+ resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-factory-destination: 1.0.0
+ micromark-factory-label: 1.0.2
+ micromark-factory-space: 1.0.0
+ micromark-factory-title: 1.0.2
+ micromark-factory-whitespace: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-chunked: 1.0.0
+ micromark-util-classify-character: 1.0.0
+ micromark-util-html-tag-name: 1.1.0
+ micromark-util-normalize-identifier: 1.0.0
+ micromark-util-resolve-all: 1.0.0
+ micromark-util-subtokenize: 1.0.2
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm-autolink-literal@1.0.3:
+ resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-sanitize-uri: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm-footnote@1.0.4:
+ resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==}
+ dependencies:
+ micromark-core-commonmark: 1.0.6
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-normalize-identifier: 1.0.0
+ micromark-util-sanitize-uri: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm-strikethrough@1.0.4:
+ resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==}
+ dependencies:
+ micromark-util-chunked: 1.0.0
+ micromark-util-classify-character: 1.0.0
+ micromark-util-resolve-all: 1.0.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm-table@1.0.5:
+ resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==}
+ dependencies:
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm-tagfilter@1.0.1:
+ resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==}
+ dependencies:
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-extension-gfm-task-list-item@1.0.3:
+ resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==}
+ dependencies:
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-gfm@2.0.1:
+ resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==}
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 1.0.3
+ micromark-extension-gfm-footnote: 1.0.4
+ micromark-extension-gfm-strikethrough: 1.0.4
+ micromark-extension-gfm-table: 1.0.5
+ micromark-extension-gfm-tagfilter: 1.0.1
+ micromark-extension-gfm-task-list-item: 1.0.3
+ micromark-util-combine-extensions: 1.0.0
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-extension-math@2.0.2:
+ resolution: {integrity: sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA==}
+ dependencies:
+ '@types/katex': 0.11.1
+ katex: 0.13.24
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-mdx-expression@1.0.3:
+ resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==}
+ dependencies:
+ micromark-factory-mdx-expression: 1.0.6
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-events-to-acorn: 1.2.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-extension-mdx-jsx@1.0.3:
+ resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==}
+ dependencies:
+ '@types/acorn': 4.0.6
+ estree-util-is-identifier-name: 2.0.1
+ micromark-factory-mdx-expression: 1.0.6
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ vfile-message: 3.1.3
+ dev: false
+
+ /micromark-extension-mdx-md@1.0.0:
+ resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==}
+ dependencies:
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-extension-mdxjs-esm@1.0.3:
+ resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==}
+ dependencies:
+ micromark-core-commonmark: 1.0.6
+ micromark-util-character: 1.1.0
+ micromark-util-events-to-acorn: 1.2.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ unist-util-position-from-estree: 1.1.1
+ uvu: 0.5.6
+ vfile-message: 3.1.3
+ dev: false
+
+ /micromark-extension-mdxjs@1.0.0:
+ resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==}
+ dependencies:
+ acorn: 8.8.1
+ acorn-jsx: 5.3.2(acorn@8.8.1)
+ micromark-extension-mdx-expression: 1.0.3
+ micromark-extension-mdx-jsx: 1.0.3
+ micromark-extension-mdx-md: 1.0.0
+ micromark-extension-mdxjs-esm: 1.0.3
+ micromark-util-combine-extensions: 1.0.0
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-factory-destination@1.0.0:
+ resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-factory-label@1.0.2:
+ resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-factory-mdx-expression@1.0.6:
+ resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==}
+ dependencies:
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-events-to-acorn: 1.2.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ unist-util-position-from-estree: 1.1.1
+ uvu: 0.5.6
+ vfile-message: 3.1.3
+ dev: false
+
+ /micromark-factory-space@1.0.0:
+ resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-factory-title@1.0.2:
+ resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==}
+ dependencies:
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-factory-whitespace@1.0.0:
+ resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==}
+ dependencies:
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-util-character@1.1.0:
+ resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==}
+ dependencies:
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-util-character@2.0.1:
+ resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-util-chunked@1.0.0:
+ resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==}
+ dependencies:
+ micromark-util-symbol: 1.0.1
+ dev: false
+
+ /micromark-util-classify-character@1.0.0:
+ resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-util-combine-extensions@1.0.0:
+ resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==}
+ dependencies:
+ micromark-util-chunked: 1.0.0
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-util-decode-numeric-character-reference@1.0.0:
+ resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==}
+ dependencies:
+ micromark-util-symbol: 1.0.1
+ dev: false
+
+ /micromark-util-decode-string@1.0.2:
+ resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==}
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-util-character: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.0.0
+ micromark-util-symbol: 1.0.1
+ dev: false
+
+ /micromark-util-encode@1.0.1:
+ resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==}
+ dev: false
+
+ /micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+ dev: false
+
+ /micromark-util-events-to-acorn@1.2.0:
+ resolution: {integrity: sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==}
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.0
+ estree-util-visit: 1.2.0
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ vfile-location: 4.0.1
+ vfile-message: 3.1.3
+ dev: false
+
+ /micromark-util-html-tag-name@1.1.0:
+ resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==}
+ dev: false
+
+ /micromark-util-normalize-identifier@1.0.0:
+ resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==}
+ dependencies:
+ micromark-util-symbol: 1.0.1
+ dev: false
+
+ /micromark-util-resolve-all@1.0.0:
+ resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==}
+ dependencies:
+ micromark-util-types: 1.0.2
+ dev: false
+
+ /micromark-util-sanitize-uri@1.1.0:
+ resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==}
+ dependencies:
+ micromark-util-character: 1.1.0
+ micromark-util-encode: 1.0.1
+ micromark-util-symbol: 1.0.1
+ dev: false
+
+ /micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+ dependencies:
+ micromark-util-character: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
+ dev: false
+
+ /micromark-util-subtokenize@1.0.2:
+ resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==}
+ dependencies:
+ micromark-util-chunked: 1.0.0
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ dev: false
+
+ /micromark-util-symbol@1.0.1:
+ resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==}
+ dev: false
+
+ /micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+ dev: false
+
+ /micromark-util-types@1.0.2:
+ resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
+ dev: false
+
+ /micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+ dev: false
+
+ /micromark@3.1.0:
+ resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
+ dependencies:
+ '@types/debug': 4.1.7
+ debug: 4.3.4(supports-color@8.1.1)
+ decode-named-character-reference: 1.0.2
+ micromark-core-commonmark: 1.0.6
+ micromark-factory-space: 1.0.0
+ micromark-util-character: 1.1.0
+ micromark-util-chunked: 1.0.0
+ micromark-util-combine-extensions: 1.0.0
+ micromark-util-decode-numeric-character-reference: 1.0.0
+ micromark-util-encode: 1.0.1
+ micromark-util-normalize-identifier: 1.0.0
+ micromark-util-resolve-all: 1.0.0
+ micromark-util-sanitize-uri: 1.1.0
+ micromark-util-subtokenize: 1.0.2
+ micromark-util-symbol: 1.0.1
+ micromark-util-types: 1.0.2
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.33.0:
+ resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ /mime-types@2.1.18:
+ resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.33.0
+ dev: true
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+
+ /minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ /mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: true
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ /ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: false
+
+ /nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: false
+
+ /natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
+ /needle@3.3.1:
+ resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+ dependencies:
+ iconv-lite: 0.6.3
+ sax: 1.3.0
+ dev: false
+
+ /negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /next-mdx-remote@4.3.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-fbxkY03pM2Wx5bDNTVKpYD5Hx3QVZGH+6xDtVIxlxXz4HTifP1yI2DrkDvxXbTz0SYGIbluRMIW81IOOa8pigA==}
+ engines: {node: '>=14', npm: '>=7'}
+ peerDependencies:
+ react: '>=16.x <=18.x'
+ react-dom: '>=16.x <=18.x'
+ dependencies:
+ '@mdx-js/mdx': 2.3.0
+ '@mdx-js/react': 2.3.0(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ vfile: 5.3.6
+ vfile-matter: 3.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /next-seo@6.4.0(next@14.0.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-XQFxkOL2hw0YE+P100HbI3EAvcludlHPxuzMgaIjKb7kPK0CvjGvLFjd9hszZFEDc5oiQkGFA8+cuWcnip7eYA==}
+ peerDependencies:
+ next: ^8.1.1-canary.54 || >=9.0.0
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+ dependencies:
+ next: 14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /next-themes@0.2.1(next@14.0.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
+ peerDependencies:
+ next: '*'
+ react: '*'
+ react-dom: '*'
+ dependencies:
+ next: 14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /next@14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==}
+ engines: {node: '>=18.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ sass:
+ optional: true
+ dependencies:
+ '@next/env': 14.0.3
+ '@swc/helpers': 0.5.2
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001565
+ postcss: 8.4.31
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ styled-jsx: 5.1.1(@babel/core@7.23.5)(react@18.2.0)
+ watchpack: 2.4.0
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 14.0.3
+ '@next/swc-darwin-x64': 14.0.3
+ '@next/swc-linux-arm64-gnu': 14.0.3
+ '@next/swc-linux-arm64-musl': 14.0.3
+ '@next/swc-linux-x64-gnu': 14.0.3
+ '@next/swc-linux-x64-musl': 14.0.3
+ '@next/swc-win32-arm64-msvc': 14.0.3
+ '@next/swc-win32-ia32-msvc': 14.0.3
+ '@next/swc-win32-x64-msvc': 14.0.3
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+ dev: false
+
+ /nextra-theme-docs@2.13.2(next@14.0.3)(nextra@2.13.2)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-yE4umXaImp1/kf/sFciPj2+EFrNSwd9Db26hi98sIIiujzGf3+9eUgAz45vF9CwBw50FSXxm1QGRcY+slQ4xQQ==}
+ peerDependencies:
+ next: '>=9.5.3'
+ nextra: 2.13.2
+ react: '>=16.13.1'
+ react-dom: '>=16.13.1'
+ dependencies:
+ '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0)
+ '@popperjs/core': 2.11.8
+ clsx: 2.0.0
+ escape-string-regexp: 5.0.0
+ flexsearch: 0.7.31
+ focus-visible: 5.2.0
+ git-url-parse: 13.1.0
+ intersection-observer: 0.12.2
+ match-sorter: 6.3.1
+ next: 14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0)
+ next-seo: 6.4.0(next@14.0.3)(react-dom@18.2.0)(react@18.2.0)
+ next-themes: 0.2.1(next@14.0.3)(react-dom@18.2.0)(react@18.2.0)
+ nextra: 2.13.2(next@14.0.3)(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ scroll-into-view-if-needed: 3.0.4
+ zod: 3.22.4
+ dev: false
+
+ /nextra@2.13.2(next@14.0.3)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-pIgOSXNUqTz1laxV4ChFZOU7lzJAoDHHaBPj8L09PuxrLKqU1BU/iZtXAG6bQeKCx8EPdBsoXxEuENnL9QGnGA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ next: '>=9.5.3'
+ react: '>=16.13.1'
+ react-dom: '>=16.13.1'
+ dependencies:
+ '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0)
+ '@mdx-js/mdx': 2.3.0
+ '@mdx-js/react': 2.3.0(react@18.2.0)
+ '@napi-rs/simple-git': 0.1.9
+ '@theguild/remark-mermaid': 0.0.5(react@18.2.0)
+ '@theguild/remark-npm2yarn': 0.2.1
+ clsx: 2.0.0
+ github-slugger: 2.0.0
+ graceful-fs: 4.2.11
+ gray-matter: 4.0.3
+ katex: 0.16.9
+ lodash.get: 4.4.2
+ next: 14.0.3(@babel/core@7.23.5)(react-dom@18.2.0)(react@18.2.0)
+ next-mdx-remote: 4.3.0(react-dom@18.2.0)(react@18.2.0)
+ p-limit: 3.1.0
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ rehype-katex: 7.0.0
+ rehype-pretty-code: 0.9.11(shiki@0.14.5)
+ rehype-raw: 7.0.0
+ remark-gfm: 3.0.1
+ remark-math: 5.1.1
+ remark-reading-time: 2.0.1
+ shiki: 0.14.5
+ slash: 3.0.0
+ title: 3.5.3
+ unist-util-remove: 4.0.0
+ unist-util-visit: 5.0.0
+ zod: 3.22.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.4.1
+ dev: false
+
+ /node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+ dev: false
+
+ /node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+ dev: false
+
+ /node-releases@2.0.13:
+ resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+ dev: false
+
+ /non-layered-tidy-tree-layout@2.0.2:
+ resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==}
+ dev: false
+
+ /npm-run-path@2.0.2:
+ resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
+ engines: {node: '>=4'}
+ dependencies:
+ path-key: 2.0.1
+ dev: false
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+
+ /npm-to-yarn@2.1.0:
+ resolution: {integrity: sha512-2C1IgJLdJngq1bSER7K7CGFszRr9s2rijEwvENPEgI0eK9xlD3tNwDc0UJnRj7FIT2aydWm72jB88uVswAhXHA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: false
+
+ /nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: false
+
+ /object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ /object-inspect@1.13.1:
+ resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+
+ /object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: true
+
+ /object.entries@1.1.7:
+ resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.fromentries@2.0.7:
+ resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.groupby@1.0.1:
+ resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ dev: true
+
+ /object.hasown@1.1.3:
+ resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /object.values@1.1.7:
+ resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+
+ /optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ '@aashutoshrathi/word-wrap': 1.2.6
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /ospath@1.2.2:
+ resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
+ dev: false
+
+ /p-finally@1.0.0:
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+
+ /p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /p-map@4.0.0:
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ aggregate-error: 3.1.0
+ dev: false
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+
+ /parse-entities@4.0.0:
+ resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==}
+ dependencies:
+ '@types/unist': 2.0.6
+ character-entities: 2.0.2
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.0.2
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+ dev: false
+
+ /parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: false
+
+ /parse-numeric-range@1.3.0:
+ resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
+ dev: false
+
+ /parse-path@7.0.0:
+ resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
+ dependencies:
+ protocols: 2.0.1
+ dev: false
+
+ /parse-url@8.1.0:
+ resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
+ dependencies:
+ parse-path: 7.0.0
+ dev: false
+
+ /parse5-htmlparser2-tree-adapter@7.0.0:
+ resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==}
+ dependencies:
+ domhandler: 5.0.3
+ parse5: 7.1.2
+ dev: false
+
+ /parse5@7.1.2:
+ resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ dependencies:
+ entities: 4.5.0
+ dev: false
+
+ /path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ /path-is-inside@1.0.2:
+ resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==}
+ dev: true
+
+ /path-key@2.0.1:
+ resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ /path-to-regexp@2.2.1:
+ resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==}
+ dev: true
+
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ /pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+ dev: false
+
+ /performance-now@2.1.0:
+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
+ dev: false
+
+ /periscopic@3.0.4:
+ resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==}
+ dependencies:
+ estree-walker: 3.0.1
+ is-reference: 3.0.0
+ dev: false
+
+ /picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ dev: false
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+ dev: false
+
+ /preact@10.19.3:
+ resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==}
+ dev: false
+
+ /prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /pretty-bytes@5.6.0:
+ resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+ dev: false
+
+ /progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ /property-information@6.2.0:
+ resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
+ dev: false
+
+ /protocols@2.0.1:
+ resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
+ dev: false
+
+ /proxy-from-env@1.0.0:
+ resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
+ dev: false
+
+ /pseudomap@1.0.2:
+ resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
+ dev: false
+
+ /psl@1.9.0:
+ resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
+ dev: false
+
+ /pump@3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: false
+
+ /punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
+ dev: true
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ /qs@6.10.4:
+ resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
+ engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
+ dev: false
+
+ /querystringify@2.2.0:
+ resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+ dev: false
+
+ /queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ dev: true
+
+ /range-parser@1.2.0:
+ resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
+ /rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+ dev: true
+
+ /react-dom@18.2.0(react@18.2.0):
+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.2.0
+ scheduler: 0.23.0
+ dev: false
+
+ /react-ga4@2.1.0:
+ resolution: {integrity: sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==}
+ dev: false
+
+ /react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ /react-is@18.2.0:
+ resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ dev: false
+
+ /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+ peerDependencies:
+ react: '>=16.6.0'
+ react-dom: '>=16.6.0'
+ dependencies:
+ '@babel/runtime': 7.23.5
+ dom-helpers: 5.2.1
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /react@18.2.0:
+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /reading-time@1.5.0:
+ resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==}
+ dev: false
+
+ /rechoir@0.6.2:
+ resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ resolve: 1.22.8
+ dev: false
+
+ /reflect.getprototypeof@1.0.4:
+ resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ globalthis: 1.0.3
+ which-builtin-type: 1.1.3
+ dev: true
+
+ /regenerate-unicode-properties@10.1.1:
+ resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ regenerate: 1.4.2
+ dev: false
+
+ /regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+ dev: false
+
+ /regenerator-runtime@0.14.0:
+ resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+
+ /regenerator-transform@0.15.2:
+ resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+ dependencies:
+ '@babel/runtime': 7.23.5
+ dev: false
+
+ /regexp-tree@0.1.27:
+ resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
+ hasBin: true
+ dev: true
+
+ /regexp.prototype.flags@1.5.1:
+ resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ set-function-name: 2.0.1
+ dev: true
+
+ /regexpp@3.2.0:
+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /regexpu-core@5.3.2:
+ resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ '@babel/regjsgen': 0.8.0
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.1.1
+ regjsparser: 0.9.1
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.1.0
+ dev: false
+
+ /registry-auth-token@3.3.2:
+ resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==}
+ dependencies:
+ rc: 1.2.8
+ safe-buffer: 5.2.1
+ dev: true
+
+ /registry-url@3.1.0:
+ resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ rc: 1.2.8
+ dev: true
+
+ /regjsparser@0.9.1:
+ resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+ hasBin: true
+ dependencies:
+ jsesc: 0.5.0
+ dev: false
+
+ /rehype-katex@7.0.0:
+ resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/katex': 0.16.7
+ hast-util-from-html-isomorphic: 2.0.0
+ hast-util-to-text: 4.0.0
+ katex: 0.16.9
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.1
+ dev: false
+
+ /rehype-pretty-code@0.9.11(shiki@0.14.5):
+ resolution: {integrity: sha512-Eq90eCYXQJISktfRZ8PPtwc5SUyH6fJcxS8XOMnHPUQZBtC6RYo67gGlley9X2nR8vlniPj0/7oCDEYHKQa/oA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ shiki: '*'
+ dependencies:
+ '@types/hast': 2.3.4
+ hash-obj: 4.0.0
+ parse-numeric-range: 1.3.0
+ shiki: 0.14.5
+ dev: false
+
+ /rehype-raw@7.0.0:
+ resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
+ dependencies:
+ '@types/hast': 3.0.3
+ hast-util-raw: 9.0.1
+ vfile: 6.0.1
+ dev: false
+
+ /remark-gfm@3.0.1:
+ resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-gfm: 2.0.1
+ micromark-extension-gfm: 2.0.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-math@5.1.1:
+ resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-math: 2.0.2
+ micromark-extension-math: 2.0.2
+ unified: 10.1.2
+ dev: false
+
+ /remark-mdx@2.1.5:
+ resolution: {integrity: sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==}
+ dependencies:
+ mdast-util-mdx: 2.0.0
+ micromark-extension-mdxjs: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-parse@10.0.1:
+ resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==}
+ dependencies:
+ '@types/mdast': 3.0.10
+ mdast-util-from-markdown: 1.2.0
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /remark-reading-time@2.0.1:
+ resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==}
+ dependencies:
+ estree-util-is-identifier-name: 2.0.1
+ estree-util-value-to-estree: 1.3.0
+ reading-time: 1.5.0
+ unist-util-visit: 3.1.0
+ dev: false
+
+ /remark-rehype@10.1.0:
+ resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+ dependencies:
+ '@types/hast': 2.3.4
+ '@types/mdast': 3.0.10
+ mdast-util-to-hast: 12.2.4
+ unified: 10.1.2
+ dev: false
+
+ /remove-accents@0.4.2:
+ resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==}
+ dev: false
+
+ /request-progress@3.0.0:
+ resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==}
+ dependencies:
+ throttleit: 1.0.1
+ dev: false
+
+ /require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /requires-port@1.0.0:
+ resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ dev: false
+
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ /resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ dev: true
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ /resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: false
+
+ /reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ /rfdc@1.3.1:
+ resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
+ dev: false
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+
+ /robust-predicates@3.0.2:
+ resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+ dev: false
+
+ /run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+ dev: false
+
+ /rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+ dependencies:
+ tslib: 2.4.1
+ dev: false
+
+ /sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+ dependencies:
+ mri: 1.2.0
+ dev: false
+
+ /safe-array-concat@1.0.1:
+ resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
+ engines: {node: '>=0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+ dev: true
+
+ /safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ /safe-regex-test@1.0.0:
+ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-regex: 1.1.4
+ dev: true
+
+ /safe-regex@2.1.1:
+ resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==}
+ dependencies:
+ regexp-tree: 0.1.27
+ dev: true
+
+ /safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: false
+
+ /sax@1.3.0:
+ resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
+ dev: false
+
+ /scheduler@0.23.0:
+ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
+ /scroll-into-view-if-needed@3.0.4:
+ resolution: {integrity: sha512-s+/F50jwTOUt+u5oEIAzum9MN2lUQNvWBe/zfEsVQcbaERjGkKLq1s+2wCHkahMLC8nMLbzMVKivx9JhunXaZg==}
+ dependencies:
+ compute-scroll-into-view: 2.0.4
+ dev: false
+
+ /section-matter@1.0.0:
+ resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+ engines: {node: '>=4'}
+ dependencies:
+ extend-shallow: 2.0.1
+ kind-of: 6.0.3
+ dev: false
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ /semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+
+ /serve-handler@6.1.5:
+ resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==}
+ dependencies:
+ bytes: 3.0.0
+ content-disposition: 0.5.2
+ fast-url-parser: 1.1.3
+ mime-types: 2.1.18
+ minimatch: 3.1.2
+ path-is-inside: 1.0.2
+ path-to-regexp: 2.2.1
+ range-parser: 1.2.0
+ dev: true
+
+ /serve@14.2.1:
+ resolution: {integrity: sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA==}
+ engines: {node: '>= 14'}
+ hasBin: true
+ dependencies:
+ '@zeit/schemas': 2.29.0
+ ajv: 8.11.0
+ arg: 5.0.2
+ boxen: 7.0.0
+ chalk: 5.0.1
+ chalk-template: 0.4.0
+ clipboardy: 3.0.0
+ compression: 1.7.4
+ is-port-reachable: 4.0.0
+ serve-handler: 6.1.5
+ update-check: 1.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /set-function-length@1.1.1:
+ resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ get-intrinsic: 1.2.2
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+
+ /set-function-name@2.0.1:
+ resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.1
+ dev: true
+
+ /shebang-command@1.2.0:
+ resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ shebang-regex: 1.0.0
+ dev: false
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+
+ /shebang-regex@1.0.0:
+ resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ /shelljs@0.8.5:
+ resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ interpret: 1.4.0
+ rechoir: 0.6.2
+ dev: false
+
+ /shiki@0.14.5:
+ resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==}
+ dependencies:
+ ansi-sequence-parser: 1.1.1
+ jsonc-parser: 3.2.0
+ vscode-oniguruma: 1.7.0
+ vscode-textmate: 8.0.0
+ dev: false
+
+ /side-channel@1.0.4:
+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ object-inspect: 1.13.1
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ /slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ /slice-ansi@3.0.0:
+ resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: false
+
+ /slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: false
+
+ /snake-case@3.0.4:
+ resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.4.1
+ dev: false
+
+ /sort-keys@5.0.0:
+ resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==}
+ engines: {node: '>=12'}
+ dependencies:
+ is-plain-obj: 4.1.0
+ dev: false
+
+ /source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+ dev: false
+
+ /space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ dev: false
+
+ /sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ dev: false
+
+ /sshpk@1.18.0:
+ resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+ dependencies:
+ asn1: 0.2.6
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+ dev: false
+
+ /streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+ dev: false
+
+ /string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ /string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /string.prototype.matchall@4.0.10:
+ resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
+ has-symbols: 1.0.3
+ internal-slot: 1.0.6
+ regexp.prototype.flags: 1.5.1
+ set-function-name: 2.0.1
+ side-channel: 1.0.4
+ dev: true
+
+ /string.prototype.trim@1.2.8:
+ resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /string.prototype.trimend@1.0.7:
+ resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /string.prototype.trimstart@1.0.7:
+ resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+ dependencies:
+ call-bind: 1.0.5
+ define-properties: 1.2.1
+ es-abstract: 1.22.3
+ dev: true
+
+ /stringify-entities@4.0.3:
+ resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+ dev: false
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+
+ /strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.0.1
+ dev: true
+
+ /strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /strip-eof@1.0.0:
+ resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ /strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /style-to-object@0.3.0:
+ resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==}
+ dependencies:
+ inline-style-parser: 0.1.1
+ dev: false
+
+ /styled-jsx@5.1.1(@babel/core@7.23.5)(react@18.2.0):
+ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+ dependencies:
+ '@babel/core': 7.23.5
+ client-only: 0.0.1
+ react: 18.2.0
+ dev: false
+
+ /stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+ dev: false
+
+ /supports-color@4.5.0:
+ resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 2.0.0
+ dev: false
+
+ /supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: false
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ /svg-parser@2.0.4:
+ resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
+ dev: false
+
+ /svgo@3.0.4:
+ resolution: {integrity: sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ css-what: 6.1.0
+ csso: 5.0.5
+ picocolors: 1.0.0
+ dev: false
+
+ /tapable@2.2.1:
+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /throttleit@1.0.1:
+ resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==}
+ dev: false
+
+ /through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ dev: false
+
+ /title@3.5.3:
+ resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==}
+ hasBin: true
+ dependencies:
+ arg: 1.0.0
+ chalk: 2.3.0
+ clipboardy: 1.2.2
+ titleize: 1.0.0
+ dev: false
+
+ /titleize@1.0.0:
+ resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /tmp@0.2.1:
+ resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
+ engines: {node: '>=8.17.0'}
+ dependencies:
+ rimraf: 3.0.2
+ dev: false
+
+ /to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /tough-cookie@4.1.3:
+ resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
+ engines: {node: '>=6'}
+ dependencies:
+ psl: 1.9.0
+ punycode: 2.3.1
+ universalify: 0.2.0
+ url-parse: 1.5.10
+ dev: false
+
+ /trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ dev: false
+
+ /trough@2.1.0:
+ resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
+ dev: false
+
+ /ts-api-utils@1.0.3(typescript@4.9.3):
+ resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
+ engines: {node: '>=16.13.0'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+ dependencies:
+ typescript: 4.9.3
+ dev: true
+
+ /ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+ dev: false
+
+ /tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ dependencies:
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+ dev: true
+
+ /tslib@2.4.1:
+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
+ dev: false
+
+ /tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
+ /tweetnacl@0.14.5:
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+ dev: false
+
+ /type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /type-fest@1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /type-fest@2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+ dev: true
+
+ /typed-array-buffer@1.0.0:
+ resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-byte-length@1.0.0:
+ resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ has-proto: 1.0.1
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-byte-offset@1.0.0:
+ resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ has-proto: 1.0.1
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typed-array-length@1.0.4:
+ resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+ dependencies:
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ is-typed-array: 1.1.12
+ dev: true
+
+ /typescript@4.9.3:
+ resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ /unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.5
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+ dev: true
+
+ /unicode-canonical-property-names-ecmascript@2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.1.0
+ dev: false
+
+ /unicode-match-property-value-ecmascript@2.1.0:
+ resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+ dependencies:
+ '@types/unist': 2.0.6
+ bail: 2.0.2
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 4.1.0
+ trough: 2.1.0
+ vfile: 5.3.6
+ dev: false
+
+ /unist-builder@3.0.0:
+ resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /unist-util-find-after@5.0.0:
+ resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ dev: false
+
+ /unist-util-generated@2.0.0:
+ resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==}
+ dev: false
+
+ /unist-util-is@5.1.1:
+ resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==}
+ dev: false
+
+ /unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
+ /unist-util-position-from-estree@1.1.1:
+ resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /unist-util-position@4.0.3:
+ resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
+ /unist-util-remove-position@4.0.1:
+ resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-visit: 4.1.1
+ dev: false
+
+ /unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /unist-util-remove@4.0.0:
+ resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: false
+
+ /unist-util-stringify-position@3.0.2:
+ resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==}
+ dependencies:
+ '@types/unist': 2.0.6
+ dev: false
+
+ /unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
+ /unist-util-visit-parents@4.1.1:
+ resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 5.1.1
+ dev: false
+
+ /unist-util-visit-parents@5.1.1:
+ resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 5.1.1
+ dev: false
+
+ /unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ dev: false
+
+ /unist-util-visit@3.1.0:
+ resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 5.1.1
+ unist-util-visit-parents: 4.1.1
+ dev: false
+
+ /unist-util-visit@4.1.1:
+ resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-is: 5.1.1
+ unist-util-visit-parents: 5.1.1
+ dev: false
+
+ /unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: false
+
+ /universalify@0.2.0:
+ resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: false
+
+ /untildify@4.0.0:
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /update-browserslist-db@1.0.13(browserslist@4.22.1):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.1
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: false
+
+ /update-check@1.5.4:
+ resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==}
+ dependencies:
+ registry-auth-token: 3.3.2
+ registry-url: 3.1.0
+ dev: true
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+ dev: true
+
+ /url-parse@1.5.10:
+ resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ dependencies:
+ querystringify: 2.2.0
+ requires-port: 1.0.0
+ dev: false
+
+ /uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: false
+
+ /uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+ dev: false
+
+ /uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dependencies:
+ dequal: 2.0.3
+ diff: 5.1.0
+ kleur: 4.1.5
+ sade: 1.8.1
+ dev: false
+
+ /vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+ dev: true
+
+ /verror@1.10.0:
+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
+ engines: {'0': node >=0.6.0}
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+ dev: false
+
+ /vfile-location@4.0.1:
+ resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==}
+ dependencies:
+ '@types/unist': 2.0.6
+ vfile: 5.3.6
+ dev: false
+
+ /vfile-location@5.0.2:
+ resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ vfile: 6.0.1
+ dev: false
+
+ /vfile-matter@3.0.1:
+ resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==}
+ dependencies:
+ '@types/js-yaml': 4.0.5
+ is-buffer: 2.0.5
+ js-yaml: 4.1.0
+ dev: false
+
+ /vfile-message@3.1.3:
+ resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==}
+ dependencies:
+ '@types/unist': 2.0.6
+ unist-util-stringify-position: 3.0.2
+ dev: false
+
+ /vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ dev: false
+
+ /vfile@5.3.6:
+ resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==}
+ dependencies:
+ '@types/unist': 2.0.6
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 3.0.2
+ vfile-message: 3.1.3
+ dev: false
+
+ /vfile@6.0.1:
+ resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ dev: false
+
+ /vscode-oniguruma@1.7.0:
+ resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
+ dev: false
+
+ /vscode-textmate@8.0.0:
+ resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
+ dev: false
+
+ /watchpack@2.4.0:
+ resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.10
+ dev: false
+
+ /web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+ dev: false
+
+ /web-streams-polyfill@3.2.1:
+ resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
+ engines: {node: '>= 8'}
+ dev: false
+
+ /web-worker@1.2.0:
+ resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==}
+ dev: false
+
+ /which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+ dev: true
+
+ /which-builtin-type@1.1.3:
+ resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function.prototype.name: 1.1.6
+ has-tostringtag: 1.0.0
+ is-async-function: 2.0.0
+ is-date-object: 1.0.5
+ is-finalizationregistry: 1.0.2
+ is-generator-function: 1.0.10
+ is-regex: 1.1.4
+ is-weakref: 1.0.2
+ isarray: 2.0.5
+ which-boxed-primitive: 1.0.2
+ which-collection: 1.0.1
+ which-typed-array: 1.1.13
+ dev: true
+
+ /which-collection@1.0.1:
+ resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+ dependencies:
+ is-map: 2.0.2
+ is-set: 2.0.2
+ is-weakmap: 2.0.1
+ is-weakset: 2.0.2
+ dev: true
+
+ /which-typed-array@1.1.13:
+ resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.5
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+
+ /widest-line@4.0.1:
+ resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ dev: true
+
+ /wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: false
+
+ /wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: false
+
+ /wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ /yallist@2.1.2:
+ resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
+ dev: false
+
+ /yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: false
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ /yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+ dev: false
+
+ /yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ /zod@3.22.4:
+ resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+ dev: false
+
+ /zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+ dev: false
diff --git a/public/favicon.png b/public/favicon.png
new file mode 100644
index 00000000..499fd349
Binary files /dev/null and b/public/favicon.png differ
diff --git a/redirects.json b/redirects.json
new file mode 100644
index 00000000..53e55bbb
--- /dev/null
+++ b/redirects.json
@@ -0,0 +1,282 @@
+[
+ {
+ "source": "/getting-started",
+ "destination": "/what-is-safe",
+ "permanent": true
+ },
+ {
+ "source": "/getting-started/readme",
+ "destination": "/what-is-safe",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/safe-smart-account",
+ "destination": "/smart-account-overview",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/modules",
+ "destination": "/smart-account-modules",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/guards",
+ "destination": "/smart-account-guards",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/security-audits",
+ "destination": "/smart-account-audits",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/signatures",
+ "destination": "/smart-account-signatures",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/signatures/eip-1271",
+ "destination": "/smart-account-signatures/eip-1271",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks",
+ "destination": "/smart-account-supported-networks",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks/v1.4.1",
+ "destination": "/smart-account-supported-networks/v1.4.1",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks/v1.3.0",
+ "destination": "/smart-account-supported-networks/v1.3.0",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks/v1.2.0",
+ "destination": "/smart-account-supported-networks/v1.2.0",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks/v1.1.1",
+ "destination": "/smart-account-supported-networks/v1.1.1",
+ "permanent": true
+ },
+ {
+ "source": "/safe-smart-account/supported-networks/v1.0.0",
+ "destination": "/smart-account-supported-networks/v1.0.0",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/safe-core-sdk",
+ "destination": "/sdk-overview",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/auth-kit",
+ "destination": "/sdk-auth-kit",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/auth-kit/guides/safe-auth",
+ "destination": "/sdk-auth-kit/guides/safe-auth",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/auth-kit/reference",
+ "destination": "/sdk-auth-kit/reference",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/auth-kit/reference/authkitbasepack",
+ "destination": "/sdk-auth-kit/reference/auth-kit-base-pack",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/auth-kit/reference/safeauthpack",
+ "destination": "/sdk-auth-kit/reference/safe-auth-pack",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/protocol-kit",
+ "destination": "/sdk-protocol-kit",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/protocol-kit/reference",
+ "destination": "/sdk-protocol-kit/reference",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/protocol-kit/reference/v1",
+ "destination": "/sdk-protocol-kit/reference/migrating-to-v1",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/protocol-kit/reference/v2",
+ "destination": "/sdk-protocol-kit/reference/migrating-to-v2",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit",
+ "destination": "/sdk-onramp-kit",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/guides/stripe",
+ "destination": "/sdk-onramp-kit/guides/stripe",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/guides/monerium",
+ "destination": "/sdk-onramp-kit/guides/monerium",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/reference",
+ "destination": "/sdk-onramp-kit/reference",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/reference/stripepack",
+ "destination": "/sdk-onramp-kit/reference/stripe-pack",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/reference/onrampkitbasepack",
+ "destination": "/sdk-onramp-kit/reference/onramp-kit-base-pack",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/onramp-kit/reference/moneriumpack",
+ "destination": "/sdk-onramp-kit/reference/monerium-pack",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/relay-kit",
+ "destination": "/sdk-relay-kit",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/relay-kit/guides/gelato",
+ "destination": "/sdk-relay-kit/guides/gelato-relay",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/relay-kit/reference/v2",
+ "destination": "/sdk-relay-kit/reference/migrating-to-v2",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/api-kit",
+ "destination": "/sdk-api-kit",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/api-kit/reference",
+ "destination": "/sdk-api-kit/reference",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/api-kit/reference/v1",
+ "destination": "/sdk-api-kit/reference/migrating-to-v1",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-aa-sdk/api-kit/reference/v2",
+ "destination": "/sdk-api-kit/reference/migrating-to-v2",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/safe-core-protocol",
+ "destination": "/protocol-overview",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-api/service-architecture",
+ "destination": "/api-service-architecture",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-api/service-architecture/safe-transaction-service",
+ "destination": "/api-service-architecture/safe-transaction-service",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-api/rpc-requirements",
+ "destination": "/api-rpc-requirements",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-api/supported-networks",
+ "destination": "/api-supported-networks",
+ "permanent": true
+ },
+ {
+ "source": "/safe-apps-sdk/safe-apps",
+ "destination": "/apps-sdk-overview",
+ "permanent": true
+ },
+ {
+ "source": "/safe-apps-sdk/get-started",
+ "destination": "/apps-sdk-get-started",
+ "permanent": true
+ },
+ {
+ "source": "/safe-apps-sdk/release",
+ "destination": "/apps-sdk-release",
+ "permanent": true
+ },
+ {
+ "source": "/miscellaneous/bug-bounty-program",
+ "destination": "/bug-bounty",
+ "permanent": true
+ },
+ {
+ "source": "/miscellaneous/bug-bounty-program/past-paid-bounties",
+ "destination": "/bug-bounty/past-paid-bounties",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol",
+ "destination": "/sdk-overview",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/plugins",
+ "destination": "/smart-account-modules",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/hooks",
+ "destination": "/smart-account-guards",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/security",
+ "destination": "/bug-bounty/past-paid-bounties",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/security/bug-bounty-program",
+ "destination": "/bug-bounty",
+ "permanent": true
+ },
+ {
+ "source": "/safe-core-protocol/security/security-audits",
+ "destination": "/smart-account-audits",
+ "permanent": true
+ },
+ {
+ "source": "/miscellaneous/bug-bounty-program/past-paid-bounties",
+ "destination": "/bug-bounty/past-paid-bounties",
+ "permanent": true
+ },
+ {
+ "source": "/miscellaneous/bug-bounty-program/past-paid-bounties",
+ "destination": "/bug-bounty/past-paid-bounties",
+ "permanent": true
+ }
+]
diff --git a/reference/TEMPLATE.md b/reference/TEMPLATE.md
deleted file mode 100644
index 7ce87f4b..00000000
--- a/reference/TEMPLATE.md
+++ /dev/null
@@ -1,56 +0,0 @@
-### When creating new documentation in the "Reference" section, use this template.
-
-```markdown
-# Title (e.g package name or class name)
-
-{Add description}
-
-## Install dependencies
-
-{Installation instructions}
-
-## Reference
-
-{Description of what the package or class does}
-
-{Code Example}
-
-### method|constructor(param1, param2)
-
-{Description}
-
-{Code Example}
-
-**Parameters**
-
-- `param1`: {Description}
-- `param2`: {Description}
- ...
-
-**Returns**
-
-- `returnedObjectType`: {Description}
-
-**Caveats**
-
-- Caveat1: {Description}
-- Caveat2: {Description}
- ...
-
-### method2(param1, param2)
-
-...
-
-### method3(param1, param2)
-
-...
-
-## Usage
-
-{Add usage examples}
-
-## Troubleshooting
-
-1. {Description}
-2. {Description}
-```
diff --git a/reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md b/reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md
deleted file mode 100644
index 72825461..00000000
--- a/reference/safe-core-sdk/auth-kit/Web3AuthModalPack.md
+++ /dev/null
@@ -1,152 +0,0 @@
-# Web3AuthModalPack
-
-Web3Auth is a pluggable authentication infrastructure for Web3 wallets and applications. It simplifies onboarding for both mainstream and crypto native users, offering experiences tailored to their preferences. It supports all social logins, web and mobile native platforms, wallets, and other key management methods, creating a cryptographic key provider specific to the user and application.
-
-The `Web3AuthModalPack` enables the use of [Web3Auth modal SDK](https://web3auth.io/docs/sdk/pnp/web/modal) with added Safe capabilities, such as retrieving the related Safe addresses for a given externally-owned account created using Web3Auth services.
-
-## Install dependencies
-
-To use the `Web3AuthModalPack`, you need to install some extra dependencies in addition to the `@safe-global/auth-kit` package.
-
-```bash
-yarn add @safe-global/auth-kit @web3auth/base @web3auth/modal
-```
-
-Choose the adapters to use with Web3Auth, and add them. For example, to use the [OpenLogin](https://web3auth.io/docs/sdk/pnp/web/adapters/openlogin) adapter, you must install the following dependency:
-
-```bash
-yarn add @web3auth/openlogin-adapter
-```
-
-Refer to the [supported adapters](https://web3auth.io/docs/sdk/pnp/web/adapters/#currently-available-wallet-adapters) in the official documentation.
-
-## Reference
-
-The `Web3AuthModalPack` class is what makes Web3Auth modal and Safe work together. Create an instance of the pack and initialize it to start the interaction.
-
-```typescript
-const web3AuthModalPack = new Web3AuthModalPack({
- txServiceUrl: 'https://safe-transaction-mainnet.safe.global'
-})
-await web3AuthModalPack.init(web3AuthModalOptions, [adapters], modalConfig)
-```
-
-
-### new Web3AuthModalPack(web3AuthConfig)
-
-**Params**
-
-- `web3AuthConfig` - The configuration used in the instantiation of the `Web3AuthModalPack` class accepts the following options:
-
-```typescript
-Web3AuthConfig {
- txServiceUrl: string
-}
-```
-- `txServiceUrl` - The URL of the Safe transaction service. It is used to retrieve the Safe addresses for an externally-owned account created using Web3Auth services. It is required to use the `Web3AuthModalPack` with Safe.
-
-**Caveats**
-You should always call the `init()` method afterwards before interacting with the pack.
-
-### init(web3AuthModalOptions, adapters[]?, modalConfig?)
-
-The init method initialize the required Web3Auth modal SDK and Safe services. It [instantiates the `Web3Auth`](https://web3auth.io/docs/quick-start?product=Plug+and+Play&sdk=Plug+and+Play+Web+Modal+SDK&platform=React#3-initialize-web3auth-for-your-preferred-blockchain) class and [configure the adapters](https://web3auth.io/docs/sdk/pnp/web/no-modal/initialize#configureadapteradapter). It calls the [`initModal`](https://web3auth.io/docs/sdk/pnp/web/modal/whitelabel#initmodal) method internally.
-
-It initializes as well the web3 provider we can retrieve afterwards using the `getProvider()` method.
-
-**Params**
-
-- `web3AuthModalOptions` - The options to create the `Web3Auth` [instance](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#instantiating-web3auth). You can send a configuration object matching the [official one](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#web3authoptions) as we passthrough the options to the `Web3Auth` instance when we instantiate it inside the pack.
-- `adapters` - The adapters for the Web3Auth modal sdk. You can use any of the [supported adapters](https://web3auth.io/docs/sdk/pnp/web/adapters/). This prop accepts an array of adapters and the `Web3AuthModalPack` will call the [`configureAdapter`](https://web3auth.io/docs/sdk/pnp/web/no-modal/initialize#configureadapteradapter) method for each one of them internally.
-
-⚠️ Remember to add the corresponding package for each adapter (e.g `@web3auth/openlogin-adapter` for OpenLogin).
-
-- `modalConfig` - The configuration for the Web3Auth modal sdk. You can explore the options [here](https://web3auth.io/docs/sdk/pnp/web/modal/whitelabel#initmodal). This options are used with the `initModal` method internally.
-
-**Caveats**
-Call always the `init()` method before interacting with the other methods in the pack.
-
-### signIn()
-
-`signIn()` calls internally the [`connect()`](https://web3auth.io/docs/sdk/pnp/web/modal/usage#connect) method from Web3Auth. It obtains a web3 provider and store it internally in the instance. Finally, retrieves the associated Safe addresses for the externally-owned account created using Web3Auth services.
-
-**Returns**
-An object with the derived externally-owned account address and the associated safe addresses.
-
-```typescript
-AuthKitSignInData {
- eoa: string
- safes?: string[]
-}
-```
-
-**Caveats**
-
-- To get the Safe addresses, instantiate the authKit with the `txServiceUrl` property in the config object. Otherwise, only the eoa will be returned.
-- ⚠️ This method currently returns the Safe addresses which the EOA is the owner of. It does not create a Safe. We are investigating ways to enhance the Auth Kit and the associated flows. ⚠️
-
-### signOut()
-
-Call this method to sign out the user and clean the session.
-
-Internally it calls the [`logout()`](https://web3auth.io/docs/sdk/pnp/web/modal/usage#web3authlogout) method from Web3Auth and clears the web3 provider stored in the instance.
-
-### getUserInfo()
-
-Using `getUserInfo()` you will receive the user information derived from the pack you are using. It varies depending on the provider.
-
-Internally it calls the [`getUserInfo()`](https://web3auth.io/docs/sdk/pnp/web/modal/usage#getuserinfo) method from Web3Auth.
-
-**Returns**
-The `UserInfo` object has properties that depend on the adapter and authentication platform and method used.
-
-### getProvider()
-
-Using `getProvider()` you will receive a regular web3 provider derived from the pack you are using.
-
-**Returns**
-A web3 provider.
-
-**Caveats**
-⚠️ Web3Auth with Social Logins returns a provider that allows you to sign transactions without any UI confirmations, unlike regular wallets such as Metamask ⚠️
-
-### subscribe(event, handler)
-
-Allow to subscribe to authentication state changes. The event depends on the pack you are using so read the chosen pack documentation.
-
-**Params**
-
-- `event` - The event you want to subscribe to. The events are defined [in the documentation](https://web3auth.io/docs/sdk/pnp/web/no-modal/initialize#subscribing-the-lifecycle-events).
-- `handler` - The handler function that will be called when the event is triggered.
-
-### unsubscribe(event, handler)
-
-Allow to unsubscribe to authentication state changes
-
-**Params**
-
-- `event` - The event you want to unsubscribe to.
-- `handler` - The handler function that will be called when the event is triggered.
-
-## Usage
-
-Calling `init()` when your page loads or component renders is all it takes to use the Auth Kit with the `Web3AuthModalPack`. To start the authentication process, simply call `signIn()` afterwards. This method returns the EOA and associated Safe addresses.
-
-```typescript
-// Instantiate and initialize the pack
-const web3AuthModalPack = new Web3AuthModalPack(web3AuthConfig)
-await web3AuthModalPack.init(web3AuthModalOptions, adapters, modalConfig)
-
-// Sign in
-const { eoa, safes } = await web3AuthModalPack.signIn()
-const userInfo = await web3AuthModalPack.getUserInfo()
-const web3Provider = web3AuthModalPack.getProvider()
-
-// Subscribe to events
-const handler = (event) => {}
-web3AuthModalPack.subscribe(packEvent, handler)
-web3AuthModalPack.unsubscribe(packEvent, handler)
-
-// Sign out
-await web3AuthModalPack.signOut()
-```
\ No newline at end of file
diff --git a/reference/safe-core-sdk/relay-kit/README.md b/reference/safe-core-sdk/relay-kit/README.md
deleted file mode 100644
index c99cb5a9..00000000
--- a/reference/safe-core-sdk/relay-kit/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# Relay Kit
diff --git a/safe-core-protocol/README.md b/safe-core-protocol/README.md
deleted file mode 100644
index 4b7cddd7..00000000
--- a/safe-core-protocol/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Safe{Core} Protocol
-
-Safe{Core} Protocol is an open, modular framework to make smart accounts secure, portable, and composable.
-
-Safe{Core} Protocol aims to create a comprehensive system to enhance user interactions' safety and flexibility within the smart account ecosystem. The protocol provides a common framework for building more tools, encourages the composition of various modules, and supports different types of smart accounts. The protocol enforces rules within the smart account ecosystem to achieve interoperability and security.
-
-## Architecture
-
-The architecture of the Safe{Core} Protocol comprises several integral components, each carrying its unique responsibilities. The protocol separates these elements by defining explicit interfaces, thus allowing independent expansion and iteration of each part. This modularity ensures the sustainable growth and evolution of the smart account ecosystem.
-
-
-
-### Manager
-
-At the heart of the protocol is the `Manager`, ensuring adherence to the prescribed rules set by the `Registry`. The `Manager` is an intermediary layer coordinating communication and interactions between `Accounts` and `Modules`.
-
-### Accounts
-
-`Accounts` are smart-contract-based user accounts (or Smart Accounts). The Safe{Core} Protocol is account-agnostic, meaning it is not tied to a specific account implementation.
-
-### Modules
-
-`Modules` extend the functionality of `Accounts` in different ways. Initial `Modules` are `Plugins`, `Hooks`, `Function Handlers`, and `Signature Verifiers`.
-
-### Registry
-
-The `Registry` is critical in maintaining and enforcing standards and security guarantees. The `Manager` will recognize and manage only the `Modules` that adhere to these guidelines.
-
-### Metadata
-
-Giving `Metadata` is crucial to offer a coherent context to the various parts and their interactions. This information helps developers add context to interactions, enhancing user understanding and transparency.
-
-## Further reading
-- [Safe{Core} Protocol Specification](https://github.com/safe-global/safe-core-protocol-specs)
-- [Safe{Core} Protocol Implementation](https://github.com/5afe/safe-core-protocol)
-- [Safe{Core} Protocol Demo Application](https://github.com/5afe/safe-core-protocol-demo/)
diff --git a/safe-core-sdk/auth-kit/web3auth.md b/safe-core-sdk/auth-kit/web3auth.md
deleted file mode 100644
index 9d6d9119..00000000
--- a/safe-core-sdk/auth-kit/web3auth.md
+++ /dev/null
@@ -1,196 +0,0 @@
-# Integration with Web3Auth
-
-This guide demonstrate how to create an externally-owned account using your email or social media account. Once authenticated, you can sign transactions and interact with any Safe Smart Accounts you own.
-
-## Prerequisites
-
-- [Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
-- [Create a Web3Auth account](https://dashboard.web3auth.io)
-
-### Install dependencies
-
-```bash
-npm i @safe-global/auth-kit @web3auth/base@4.3.0 @web3auth/modal@4.3.1 @web3auth/openlogin-adapter@4.3.0
-```
-
-## Create a Web3AuthModalPack instance
-
-We are going to use the provided `Web3AuthModalPack` exported in the `@safe-global/auth-kit` package.
-
-Create an instance of the [Web3AuthModalPack](https://github.com/safe-global/safe-core-sdk/tree/main/packages/auth-kit/src/packs/web3auth/Web3AuthModalPack.ts) using the required `Web3AuthConfig` configuration object.
-
-```typescript
-import { Web3AuthModalPack, Web3AuthConfig } from '@safe-global/auth-kit'
-import { Web3AuthOptions } from '@web3auth/modal'
-import { OpenloginAdapter } from '@web3auth/openlogin-adapter'
-
-
-// https://web3auth.io/docs/sdk/pnp/web/modal/initialize#arguments
-const options: Web3AuthOptions = {
- clientId: 'YOUR_WEB3_AUTH_CLIENT_ID', // https://dashboard.web3auth.io/
- web3AuthNetwork: 'testnet',
- chainConfig: {
- chainNamespace: CHAIN_NAMESPACES.EIP155,
- chainId: '0x5',
- // https://chainlist.org/
- rpcTarget: 'https://rpc.ankr.com/eth_goerli'
- },
- uiConfig: {
- theme: 'dark',
- loginMethodsOrder: ['google', 'facebook']
- }
-}
-
-// https://web3auth.io/docs/sdk/pnp/web/modal/initialize#configuring-adapters
-const modalConfig = {
- [WALLET_ADAPTERS.TORUS_EVM]: {
- label: 'torus',
- showOnModal: false
- },
- [WALLET_ADAPTERS.METAMASK]: {
- label: 'metamask',
- showOnDesktop: true,
- showOnMobile: false
- }
-}
-
-// https://web3auth.io/docs/sdk/pnp/web/modal/whitelabel#whitelabeling-while-modal-initialization
-const openloginAdapter = new OpenloginAdapter({
- loginSettings: {
- mfaLevel: 'mandatory'
- },
- adapterSettings: {
- uxMode: 'popup',
- whiteLabel: {
- name: 'Safe'
- }
- }
-})
-
-const web3AuthConfig: Web3AuthConfig = {
- txServiceUrl: 'https://safe-transaction-goerli.safe.global'
-}
-
-// Instantiate and initialize the pack
-const web3AuthModalPack = new Web3AuthModalPack(web3AuthConfig)
-await web3AuthModalPack.init({ options, adapters: [openloginAdapter], modalConfig })
-```
-
-## Sign in to an Ethereum account
-
-Once your `Web3AuthModalPack` instance is created, use the `signIn()` method to start the authentication process. Usually, you call this method when the user clicks on a "Sign In" button added to your page.
-
-Important considerations about Web3Auth are:
-
-1) When you sign in with the same social account, the same Ethereum address will be returned for the same Web3Auth client ID. Web3Auth [scopes the creation of the wallet](https://web3auth.io/docs/troubleshooting/different-wallet-address-issue) (address) to the DApp, so when interacting with other DApps using Web3Auth, a different Ethereum address will be returned. This is by design and to enhanced security.
-
-2) If you sign in with an email and then with a social account using the same email (e.g. "Sign in with Google"), a different Ethereum address might be returned even the same email address is used.
-
-```typescript
-// The signIn() method will return the user's Ethereum address
-// The await will last until the user is authenticated, so while the UI modal is showed
-const authKitSignData = await web3AuthModalPack.signIn()
-```
-
-The returned `authKitSignData` data contains the following props:
-
-```typescript
-AuthKitSignInData {
- eoa: string // The safe signer
- safes?: string[] // The list of associated Safe addresses
-}
-```
-
-The `signOut()` method removes the current session.
-
-```typescript
-await web3AuthModalPack.signOut()
-```
-
-Call `getProvider()` to get the Ethereum provider instance.
-
-```typescript
-web3AuthModalPack.getProvider()
-```
-
-We expose two methods for listening to events, `subscribe()` and `unsubscribe()`. In the `Web3AuthModalPack` case, we can listen to all the events listed [here](https://web3auth.io/docs/sdk/pnp/web/modal/initialize#subscribing-the-lifecycle-events).
-
-```typescript
-import { ADAPTER_EVENTS } from '@web3auth/base'
-
-web3AuthModalPack.subscribe(ADAPTER_EVENTS.CONNECTED, () => {
- console.log('User is authenticated')
-})
-
-web3AuthModalPack.subscribe(ADAPTER_EVENTS.DISCONNECTED, () => {
- console.log('User is not authenticated')
-})
-```
-
-When `txServiceUrl` is provided in the `Web3AuthModalPack` instantiation, the list of associated Safe addresses will be returned as part of the `signIn()` method response.
-
-```typescript
-const web3AuthModalPack = new Web3AuthModalPack({
- txServiceUrl: 'https://safe-transaction-goerli.safe.global'
-})
-```
-
-## Signing transactions using the Web3AuthModalPack and Protocol Kit
-
-The `Web3AuthModalPack` can be combined with the [Protocol Kit](../protocol-kit/) to connect to a Safe using the `provider` and `signer` of the currently authenticated account.
-
-Once connected, you can use any of the methods available in the [Protocol Kit](https://github.com/safe-global/safe-core-sdk/tree/main/packages/protocol-kit#sdk-api).
-
-```typescript
-import { ethers } from 'ethers'
-import { EthersAdapter } from '@safe-global/protocol-kit'
-
-provider = new ethers.providers.Web3Provider(web3AuthModalPack.getProvider())
-signer = provider.getSigner()
-
-const ethAdapter = new EthersAdapter({
- ethers,
- signerOrProvider: signer || provider
-})
-
-const safeSDK = await Safe.create({
- ethAdapter,
- safeAddress
-})
-
-// Create a Safe transaction with the provided parameters
-const safeTransactionData: MetaTransactionData = {
- to: '0x',
- data: '0x',
- value: ethers.utils.parseUnits('0.0001', 'ether').toString()
-}
-
-const safeTransaction = await safeSDK.createTransaction({ safeTransactionData })
-```
-
-## Sign messages using the `Web3AuthModalPack`
-
-You can also sign any arbitrary message or transaction as a regular Signing Account with your favorite web3 library:
-
-```typescript
-// Using web3
-const web3 = new Web3(web3AuthModalPack.getProvider())
-
-await web3.eth.sendTransaction(tx)
-await web3.eth.signTransaction(tx)
-const message = 'hello world'
-const address = '0x...'
-await web3.eth.personal.sign(message, address)
-
-// Using ethers
-const provider = new ethers.providers.Web3Provider(web3AuthModalPack.getProvider())
-const signer = provider.getSigner()
-
-await signer.sendTransaction(tx)
-await signer.signTransaction(tx)
-await signer.signMessage(message)
-```
-
-## Alternative example in `@safe-global/safe-core-sdk`
-
-See an [example](https://github.com/safe-global/safe-core-sdk/blob/main/packages/auth-kit/example/src/App.tsx) on how to initialize and use the Auth Kit.
diff --git a/safe-core-sdk/safe-apps/README.md b/safe-core-sdk/safe-apps/README.md
deleted file mode 100644
index 4784fa0f..00000000
--- a/safe-core-sdk/safe-apps/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: What are Safe Apps?
----
-
-# Safe Apps SDK
-
-With over $90B worth of digital assets held in Safe accounts alone, it's essential for the dapp ecosystem to access the untapped market of multi-signature wallets. Safe Apps introduce a completely new way for developers to build their dapps right into a Multisig interface. Turn your Dapp into an HTML iframe component that can be accessed through the Safe. We are providing extensive developer tooling to make it easy to create, test and integrate Safe Apps into the Safe. This includes an unique design system, reusable components and a Safe App SDK that facilitates the Safe App <> Safe communication.
-
-Please refer to this [EthCC3 talk](https://www.youtube.com/watch?v=1GirpNHZPJM&t=168s) to learn more about Safe Apps.
-
-There are already Safe Apps available for a number of popular protocols such as [Aave](https://aave.com), [Synthetix](https://synthetix.io), [1inch](https://1inch.exchange) or [Balancer](https://balancer.finance). These have been build by 3rd party developers or the projects themselves.
-
-If you are missing a Safe App, get in touch with the respective project or get building with the [Safe Apps SDK](./get-started.md).
-
-#### On-chain stats
-
-There are Dune Analytics dashboards about Safe Apps available:
-
-* [Number of transactions](https://explore.duneanalytics.com/dashboard/gnosis-safe---safe-apps-transactions)
-* [Transaction volume](https://explore.duneanalytics.com/dashboard/gnosis-safe---safe-apps-volume)
-
-#### Existing Safe Apps
-
-This is a list of several known public repositories containing Safe Apps for reference:
-
-* [Transaction builder](https://github.com/safe-global/safe-react-apps/tree/development/apps/tx-builder)
-* [WalletConnect](https://github.com/safe-global/safe-react-apps/tree/development/apps/wallet-connect)
-* [CSV Airdrop](https://github.com/bh2smith/safe-airdrop)
-* [Open Zeppelin](https://github.com/OpenZeppelin/upgrades-safe-app)
-* [Balancer](https://github.com/balancer-labs/frontend-v2)
-* [1inch Exchange](https://github.com/CryptoManiacsZone/gnosis.1inch.exchange)
-* [Synthetix](https://github.com/protofire/safe-app-synthetix-mintr)
-* [Sablier](https://github.com/sablierhq/safe-app)
-* [PancakeSwap](https://github.com/pancakeswap/pancake-frontend)
-
-#### Disclaimer
-
-It is at our sole discretion to list or delist apps from the Safe. Safe Apps are not owned, controlled, maintained, or audited by Gnosis.
diff --git a/safe-core-sdk/safe-apps/example-safe-app.md b/safe-core-sdk/safe-apps/example-safe-app.md
deleted file mode 100644
index 5c149e74..00000000
--- a/safe-core-sdk/safe-apps/example-safe-app.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-description: >-
- Build a Safe App that allows transferring assets out of the Safe in 1
- transaction
----
-
-# Build Safe App with batch transactions
-
-## What are we building?
-
-This tutorial will build a Safe App that enables us to migrate all the assets from a Safe to any other wallet in a single transaction. It doesn't include NFTs, but this is a great thing to do on your own. In addition, you will learn about smart contract wallets, multi-signature transaction flow, and batched transactions.
-
-Find the Github repo with the complete guide [here](https://github.com/gnosis/safe-apps-sdk/tree/master/guides/drain-safe-app).
-
-### Prerequisites
-
-We'll assume that you are familiar with TypeScript (JavaScript), React, and Ethereum and have `node.js` and `npm` installed.
-
-### Help
-
-If you need help, you can reach Safe developers in the `#safe-developers` channel in [https://chat.safe.global](https://chat.gnosis.io) or [create a discussion](https://github.com/safe-global/safe-apps-sdk/discussions).
diff --git a/safe-core-sdk/safe-apps/get-started.md b/safe-core-sdk/safe-apps/get-started.md
deleted file mode 100644
index 7fcf70fa..00000000
--- a/safe-core-sdk/safe-apps/get-started.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-description: Basic resources to start creating Safe Apps
----
-
-# Get started
-
-Welcome! We are glad on your interest about creating a Safe App. The team is working hard to provide the tools to make it easier for you to build apps that can interact with Safe.
-
-Once you are here, the main resources include:
-
-* [Safe Apps SDK Packages](./get-started.md#safe-apps-sdk-packages)
-* [Basic Requirements](./get-started.md#basic-requirements)
-* [UI Kit](./get-started.md#ui-kit)
-
-## Safe Apps SDK packages
-
-This is one of our main resources for Safe Apps integrations. Whether you already have a dapp or are thinking about creating a new one, you will find it useful to rely on one of our integrations to easily communicate with Safe{Wallet}. In these packages, you will find integrations with very common packages like Web3Modal, Blocknative onboard.js or web3-react, that you may already be using on your project.
-
-For those creating a new dapp, using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to kickstart the basic structure with all the necessary configuration will speed up the process.
-
-[Check more about SDK Packages](./overview.md).
-
-## Basic requirements
-
-If you already have a dapp, there are some mandatory requirements to adapt your app to be used as a Safe App. Without this basic configuration, the dapp won't work with the Safe as expected.
-
-If you are using our [CRA template](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/cra-template-safe-app) to start your Safe App, these basic requirements are already included.
-
-#### Manifest
-
-It is mandatory that your app exposes a `manifest.json` file in the root dir with this structure:
-
-```json
-{
- "name": "YourAppName",
- "description": "A description of what your app do",
- "iconPath": "myAppIcon.svg"
-}
-```
-
-> Note: iconPath it's the public relative path where the Safe will try to load your app icon. For this example, it should be https://yourAppUrl/myAppIcon.svg.
-
-#### CORS
-
-At some moments we need to be able to reach the `manifest.json` from our app. To allow this it is required to enable **Cross Site Requests** by setting the **CORS** headers to the `manifest.json`.
-
-The required headers are:
-
-```
-"Access-Control-Allow-Origin": "\*",
-"Access-Control-Allow-Methods": "GET",
-"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
-```
-
-#### React development
-
-It is possible to use the local React development server. For this you need to set the **CORS** headers and make sure to use the same protocol (http or https) as the Safe interface you are using for testing.\
-
-
-**CORS for development**
-
-For this we recommend to use [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). To enable the library update the `scripts` section in the `package.json`:
-
-```json
-"scripts": {
- "start": "react-app-rewired start",
- "build": "react-app-rewired build",
- "test": "react-app-rewired test"
-},
-```
-
-Additionally, you need to create the `config-overrides.js` file in the root of the project to confirgure the **CORS** headers. The content of the file should be:
-
-```js
-/* config-overrides.js */
-
-module.exports = {
- // The function to use to create a webpack dev server configuration when running the development
- // server with 'npm run start' or 'yarn start'.
- // Example: set the dev server to use a specific certificate in https.
- devServer: function (configFunction) {
- // Return the replacement function for create-react-app to use to generate the Webpack
- // Development Server config. "configFunction" is the function that would normally have
- // been used to generate the Webpack Development server config - you can use it to create
- // a starting configuration to then modify instead of having to create a config from scratch.
- return function (proxy, allowedHost) {
- // Create the default config by calling configFunction with the proxy/allowedHost parameters
- const config = configFunction(proxy, allowedHost);
-
- config.headers = {
- 'Access-Control-Allow-Origin': '*',
- 'Access-Control-Allow-Methods': 'GET',
- 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
- };
-
- // Return your customised Webpack Development Server config.
- return config
- }
- },
-}
-```
-
-**SSL**
-
-To enable SSL with `react-scripts` it is necessary to set the `HTTPS` environment variable to `true`. This can be done in the `package.json` file by adjusting the `scripts` section to:
-
-```json
-"scripts": {
- "start": "HTTPS=true react-app-rewired start",
-},
-```
-
-In the case that the SSL certificate provided by `react-scripts` is not valid, it is required to mark it as trusted in your browser. To do this, open the Safe App in a separate tab (not in the Safe interface) and accept the certificate or ignore the warning.
-
-## UI Kit
-
-If you are creating your Safe App from scratch, we provide a reusable react components package to make it easy to build Safe Apps with a near-native look and feel while still enabling developers to use their branding in the Safe Apps.
-
-* [Check all available components in the storybook](https://components.safe.global)
-* [Check UI Kit repository](https://github.com/safe-global/safe-react-components)
diff --git a/safe-core-sdk/safe-apps/release.md b/safe-core-sdk/safe-apps/release.md
deleted file mode 100644
index a8b7232e..00000000
--- a/safe-core-sdk/safe-apps/release.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Releasing your Safe App
-
-### Release process
-
-#### How to get your Safe Apps into the hands of users
-
-As soon as you finish developing and testing your Safe App, you can already let some actual users test it by simply sending them the link to the hosted Safe App and asking them to add it as a Custom App. [This guide](https://help.safe.global/en/articles/40859-add-a-custom-safe-app) explains how to add custom apps.
-
-#### Get your Safe App listed in the Safe
-
-If you would like your Safe App to appear in the Safe, it must meet the following criteria:
-
-**1) Smart contracts must be audited**
-
-Security it's a top priority. If your Safe App includes smart contracts of your own you should provide an external audit result document. If smart contracts were created by a 3rd party you should be using smart contracts that are properly audited.
-
-**2) Your Safe App must include a manifest.json file at the root containing the following data:**
-
-`"name": "Name of your Safe App"`
-
-Your Safe App's name, maximum 50 characters.
-
-`"iconPath": "your_logo.svg"`
-
-A relative file path to your App's logo. The icon must be a square SVG image of at least 128 by 128 pixels.
-
-`"description": "This is the Safe app description."`
-
-Few sentences describing your application, maximum 200 characters
-
-You can find an example manifest file on [Github](https://github.com/safe-global/safe-apps-sdk/blob/main/packages/cra-template-safe-app/template/public/manifest.json). In addition, you can find an example Safe App on IPFS [here](https://ipfs.io/ipfs/QmTgnb1J9FDR9gimptzvaEiNa25s92iQy37GyqYfwZw8Aj/).
-
-Remember that **CORS** should be configured correctly on the `manifest.json` so we can fetch the information as [mentioned here](./get-started.md#cors).
-
-**3) The app auto-connects to the Safe**
-
-When an user opens the app, it should automatically select the Safe as a wallet. Ensure to check the case if the user previously opened the app outside of the Safe with another wallet.
-
-**4) The Safe team has reviewed the Safe App**
-
-The requirement doesn't apply for battle-tested applications hosted on the same domain like the main dApp.
-
-While we won't be able to do a proper audit for your Safe App, we still would like to look at the source code to raise issues or suggest improvements. So whether your Safe App is open or closed source, please send us either a **link to the public repo or an invitation to the private code repository**.
-
-We also would like to make a rough functional review of the App, so please provide us with a **high-level test plan/feature list** that allows our QA team to make sure everything works as intended in production. Video walkthroughs are also welcome.
-
-**5) Help us decode your Safe App transactions**
-
-We want to display interactions with Safe Apps as human-readable as possible. To do this, we need the contract ABI of the contracts that your Safe App interacts with. The ideal way to do this would be to verify your contracts via [Sourcify](https://github.com/ethereum/sourcify), which we can leverage to decode transactions interacting with those contracts.
-
-Alternatively, you can provide us with the ABIs as JSON files or the links to the verified contracts on Etherscan, so we can implement transaction decoding for your Safe App interactions.
-
-**Create an issue in our repository once you've verified that your app meets these requirements:** [https://github.com/5afe/safe-apps-list](https://github.com/5afe/safe-apps-list)
-
-#### The official launch and beyond
-
-After we have reviewed and integrated your Safe App, the App will first be available in the [staging environment](https://safe-wallet-web.staging.5afe.dev) of the Safe for you to do a final review. We would then approach you to coordinate the launch and a joint announcement.
-
-At any point after the launch, if you or your users encounter issues with the Safe App, or you want to release an update to an existing Safe App, please get in touch with us via [Discord](https://chat.safe.global).
-
-While developing your Safe App you can directly use [our production interface](https://app.safe.global) for testing it. Some testnets like Goerli are also available there.
-
-Once your app is live, even if you are running it locally, you can import it to the Safe application as a custom app. To do so, you should select the "Apps" tab:
-
-
-
-Use the `Add custom app` button and add your app using a link:
-
-
diff --git a/safe-smart-account/modules.md b/safe-smart-account/modules.md
deleted file mode 100644
index af487f5c..00000000
--- a/safe-smart-account/modules.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Safe Modules
-
-Safe Modules add custom features to Safe contracts. They are smart contracts that add functionality to Safe while separating module logic from Safe's core contracts. A basic Safe does not require any modules. Adding and removing a module requires confirmation from the configured threshold number of owners. Events are emitted whenever a module is added or removed and a module transaction succeeds or fails.
-
-Safe Modules can include daily spending allowances, amounts that can be spent without the approval of other owners, recurring transactions modules, and standing orders performed on a recurring date. For example, paying your rent or social recovery modules may allow you to recover a Safe if you lose access to owner accounts.
-
-
-
-## How to create a Safe Module
-
-A great way to understand how Safe Modules work is by creating one. An excellent place to start is [Safe Modding 101: Create your own Safe Module](https://www.youtube.com/watch?v=nmDYc9PlAic).
-
-{% embed url="https://www.youtube.com/watch?v=nmDYc9PlAic" %}
-Watch on YouTube
-{% endembed %}
-
-## Examples
-
-1. [Safe Modules](https://github.com/safe-global/safe-modules)
-2. [Zodiac-compliant modules](https://zodiac.wiki/index.php/Introduction:_Zodiac_Standard#Modules)
-
-{% hint style="danger" %}
-Safe Modules can be a security risk since they can execute arbitrary transactions. Only add trusted and audited modules to a Safe. A malicious module can take over a Safe.
-{% endhint %}
diff --git a/styles/Vocab/default/accept.txt b/styles/Vocab/default/accept.txt
deleted file mode 100644
index 6cf2006f..00000000
--- a/styles/Vocab/default/accept.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-Safe{Core} Protocol
-Safe{Core} Account Abstraction SDK
-Safe Smart Account
-Safe Module
-Safe Modules
-Safe Guards
-Safe Transaction Service
-Blockchain
-blockchain
-blockchains
-onchain
-offchain
-Offchain
-multisig
-Auth Kit
-Protocol Kit
-Relay Kit
-Onramp Kit
-API Kit
-Onramp
-Safe Transaction Service
-Transaction Service
-Safe Config Service
-Config Service
-Safe Client Gateway
-Client Gateway
-Config
-config
-backend
-Safe{DAO}
-AA
-API
-ABI
-ABIs
-SDK
-ETH
-EIP
-ERC
-Gunicorn
-WSGI
-Sourcify
-Etherscan
-Blockscout
-crypto
-cryptocurrencies
-Ethereum
-blockchain
-Metamask
-Monerium
-Gelato
-RPC
-Mainnet
-Goerli
-DAO
-composable
-endhint
-endembed
diff --git a/styles/emotion.ts b/styles/emotion.ts
new file mode 100644
index 00000000..183a5276
--- /dev/null
+++ b/styles/emotion.ts
@@ -0,0 +1,15 @@
+import createCache, { type EmotionCache } from '@emotion/cache'
+
+// On the client side, Create a meta tag at the top of the and set it as insertionPoint.
+// This assures that MUI styles are loaded first.
+// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.
+export const createEmotionCache = (): EmotionCache => {
+ let insertionPoint
+
+ if (typeof document !== 'undefined') {
+ const emotionInsertionPoint = document.querySelector('meta[name="emotion-insertion-point"]')
+ insertionPoint = emotionInsertionPoint ?? undefined
+ }
+
+ return createCache({ key: 'mui-style', insertionPoint })
+}
diff --git a/styles/palette.ts b/styles/palette.ts
new file mode 100644
index 00000000..0d81c2d1
--- /dev/null
+++ b/styles/palette.ts
@@ -0,0 +1,65 @@
+export const palette = {
+ text: {
+ primary: '#FFFFFF',
+ secondary: '#636669',
+ disabled: '#636669',
+ dark: '#121312'
+ },
+ primary: {
+ dark: '#0cb259',
+ main: '#12FF80',
+ light: '#A1A3A7'
+ },
+ secondary: {
+ dark: '#DCDEE0',
+ main: '#FFFFFF',
+ light: '#12FF80',
+ background: '#303033'
+ },
+ border: {
+ main: '#636669',
+ light: '#303033',
+ background: '#121312'
+ },
+ error: {
+ dark: '#AC2C3B',
+ main: '#FF5F72',
+ light: '#FFB4BD',
+ background: '#2F2527'
+ },
+ success: {
+ dark: '#028D4C',
+ main: '#00B460',
+ light: '#81C784',
+ background: '#1F2920'
+ },
+ info: {
+ dark: '#52BFDC',
+ main: '#5FDDFF',
+ light: '#B7F0FF',
+ background: '#19252C'
+ },
+ warning: {
+ dark: '#CD674E',
+ main: '#FF8061',
+ light: '#FFB7A6',
+ background: '#2F2318'
+ },
+ background: {
+ default: '#121312',
+ dark: '#1C1C1C',
+ main: '#121312',
+ paper: '#1C1C1C',
+ light: '#1B2A22'
+ },
+ backdrop: {
+ main: '#636669'
+ },
+ logo: {
+ main: '#FFFFFF',
+ background: '#303033'
+ },
+ static: {
+ main: '#121312'
+ }
+}
diff --git a/styles/styles.css b/styles/styles.css
new file mode 100644
index 00000000..e2aa1de3
--- /dev/null
+++ b/styles/styles.css
@@ -0,0 +1,53 @@
+html.dark.dark body {
+ font-family: 'DM Sans', sans-serif;
+ background-color: #121312;
+}
+
+html[class~='dark'] .dark\:nx-bg-dark.dark\:nx-bg-dark {
+ background-color: #121312;
+}
+
+#__next > div > div > div {
+ backdrop-filter: blur(8px);
+ background: hsla(0, 0%, 100%, 0.005);
+ background-color: transparent !important;
+}
+
+#__next > div > div > nav {
+ height: 94px;
+}
+
+#__next > div > footer {
+ background-color: #121312;
+}
+
+#__next > div > footer > div {
+ padding-right: 0;
+ padding-left: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+#__next > div > footer > div > div > div > div > ul {
+ margin-top: 18px;
+ margin-bottom: 18px;
+}
+
+.nextra-breadcrumb.nextra-breadcrumb {
+ display: none;
+}
+
+.video-responsive {
+ overflow: hidden;
+ padding-bottom: 56.25%;
+ position: relative;
+ height: 0;
+}
+
+.video-responsive iframe {
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ position: absolute;
+}
diff --git a/styles/theme.ts b/styles/theme.ts
new file mode 100644
index 00000000..c6fd5f9b
--- /dev/null
+++ b/styles/theme.ts
@@ -0,0 +1,179 @@
+import { createTheme } from '@mui/material/styles'
+import type { Shadows } from '@mui/material/styles'
+
+import { palette } from './palette'
+
+declare module '@mui/material/styles' {
+ // Custom color palettes
+ interface Palette {
+ border: Palette['primary']
+ logo: Palette['primary']
+ backdrop: Palette['primary']
+ static: Palette['primary']
+ }
+ interface PaletteOptions {
+ border: PaletteOptions['primary']
+ logo: PaletteOptions['primary']
+ backdrop: PaletteOptions['primary']
+ static: PaletteOptions['primary']
+ }
+
+ interface TypeBackground {
+ main: string
+ light: string
+ }
+
+ // Custom color properties
+ interface PaletteColor {
+ background?: string
+ }
+ interface SimplePaletteColorOptions {
+ background?: string
+ }
+}
+
+// declare module '@mui/material/Button' {
+// interface ButtonPropsColorOverrides {
+// background: true
+// }
+// }
+
+export const theme = createTheme({
+ breakpoints: {
+ values: {
+ xs: 0,
+ sm: 600,
+ md: 900,
+ lg: 1200,
+ xl: 1630
+ }
+ },
+ palette: {
+ mode: 'dark',
+ ...palette
+ },
+ spacing: 8,
+ shape: {
+ borderRadius: 6
+ },
+ shadows: [
+ 'none',
+ `0 0 2px ${palette.primary.light}`,
+ ...Array(23).fill('none')
+ ] as Shadows,
+ typography: {
+ fontFamily: 'Citerne, sans-serif',
+ h1: {
+ fontSize: '56px',
+ lineHeight: '60px',
+ fontWeight: 700,
+
+ '@media (min-width:600px)': {
+ fontSize: '36px',
+ lineHeight: '82px'
+ }
+ },
+ h2: {
+ fontSize: '40px',
+ lineHeight: '44px',
+
+ '@media (min-width:600px)': {
+ fontSize: '60px',
+ lineHeight: '64px'
+ }
+ },
+ h3: {
+ fontSize: '32px',
+ lineHeight: '36px'
+ },
+ h4: {
+ fontSize: '20px',
+ lineHeight: '30px',
+
+ '@media (min-width:600px)': {
+ fontSize: '24px',
+ lineHeight: '32px'
+ }
+ },
+ h5: {
+ fontSize: '16px'
+ },
+ body1: {
+ fontSize: '16px',
+ lineHeight: '24px',
+
+ '@media (min-width:600px)': {
+ fontSize: '18px',
+ lineHeight: '28px'
+ }
+ },
+ body2: {
+ fontSize: '14px',
+ lineHeight: '24px'
+ },
+ caption: {
+ fontSize: '12px',
+ lineHeight: '24px',
+ letterSpacing: '0.1em',
+ fontWeight: 500,
+ textTransform: 'uppercase',
+ color: palette.primary.light
+ },
+ overline: {
+ fontSize: '11px',
+ lineHeight: '14px',
+ textTransform: 'uppercase',
+ letterSpacing: '1px'
+ }
+ },
+ components: {
+ MuiSvgIcon: {
+ styleOverrides: {
+ fontSizeSmall: {
+ width: '1rem',
+ height: '1rem'
+ }
+ }
+ },
+ MuiButton: {
+ styleOverrides: {
+ sizeLarge: {
+ fontSize: '18px',
+ lineHeight: '26px',
+ padding: '15px 22px'
+ },
+ root: {
+ textTransform: 'inherit'
+ }
+ }
+ },
+ MuiOutlinedInput: {
+ styleOverrides: {
+ notchedOutline: {
+ borderColor: 'inherit'
+ },
+ root: {
+ color: palette.border.main
+ }
+ }
+ },
+ MuiContainer: {
+ defaultProps: {
+ fixed: true,
+ maxWidth: 'xl',
+ disableGutters: true
+ },
+ styleOverrides: {
+ root: {
+ paddingLeft: '15px',
+ paddingRight: '15px',
+
+ '@media (min-width:1630px)': {
+ paddingLeft: '24px',
+ paddingRight: '24px'
+ }
+ }
+ }
+ }
+ }
+})
diff --git a/tests/redirections.spec.ts b/tests/redirections.spec.ts
new file mode 100644
index 00000000..f91ea2d2
--- /dev/null
+++ b/tests/redirections.spec.ts
@@ -0,0 +1,10 @@
+import redirects from '../redirects.json'
+
+describe('Should redirect legacy routes', () => {
+ redirects.forEach(redirect => {
+ it(`Should redirect ${redirect.source} to ${redirect.destination}`, () => {
+ cy.visit(redirect.source)
+ cy.url().should('include', redirect.destination)
+ })
+ })
+})
diff --git a/theme.config.tsx b/theme.config.tsx
new file mode 100644
index 00000000..bd58b0a9
--- /dev/null
+++ b/theme.config.tsx
@@ -0,0 +1,43 @@
+import React from 'react'
+import type { DocsThemeConfig } from 'nextra-theme-docs'
+import { useRouter } from 'next/router'
+
+import SafeLogo from './assets/svg/safe-logo-white.svg'
+import Footer from './components/Footer'
+// import Feedback from './components/Feedback'
+
+const config: DocsThemeConfig = {
+ darkMode: false,
+ nextThemes: {
+ forcedTheme: 'dark'
+ },
+ primaryHue: 150,
+ logo: ,
+ project: {
+ link: 'https://github.com/safe-global'
+ },
+ docsRepositoryBase: 'https://github.com/safe-global/safe-docs/tree/main',
+ footer: {
+ text:
+ },
+ sidebar: {
+ defaultMenuCollapseLevel: 1
+ },
+ head: ,
+ useNextSeoProps: () => {
+ const { asPath } = useRouter()
+ if (asPath !== '/') {
+ return {
+ titleTemplate: '%s – Safe Docs'
+ }
+ }
+ }
+ // main: ({ children }) => (
+ // <>
+ // {children}
+ //
+ // >
+ // )
+}
+
+export default config
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..b0784eb4
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "lib": ["ESNext", "DOM", "DOM.Iterable", "ES2021.String"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": false,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "incremental": true,
+ "sourceMap": true,
+ "outDir": "dist",
+ "types": ["cypress"]
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".eslintrc.js",
+ "**/scripts/**/*"
+ ],
+ "exclude": ["node_modules", "next.config.js"]
+}